Using Numpy to Search for Average, Medium, Mode, or Range of an Entered Number Set

I am creating a program to search for Average, Median, Mode or Range. When I run this, it works fine until it gets to the part of computing the answer. This gives me the error "can not preform reduce with flexible type". I was looking for this error, but could not find what I needed to fix. This is my first time using numpy, so any help would be great.

import sys import numpy as np welcomeString = input("Welcome to MMMR Calculator\nWhat would you like to calculate(Mean,Median,Mode,Range):") if welcomeString.lower() == "mean": meanNumbers = input("What numbers would you like to use?:") print (np.average(meanNumbers)) stop = input() if welcomeString.lower() == "median": medianNumbers = input("What numbers would like to use?:") print (np.median(medianNumbers)) stop = input() if welcomeString.lower() == "mode": modeNumbers = input("What numbers would you like to use?:") print (np.mode(modeNumbers)) stop = input() if welcomeString.lower() == "range": rangeNumbers = input("What numbers would you like to use?:") print (np.arange(rangeNumbers)) stop = input() 
+7
python numpy
source share
2 answers

You pass the string to functions that are not allowed.

 >>> meanNumbers = input("What numbers would you like to use?:") What numbers would you like to use?:1 2 3 4 5 6 >>> np.average(meanNumbers) #... TypeError: cannot perform reduce with flexible type 

You need to make an array or a list of them.

 >>> np.average(list(map(float, meanNumbers.split()))) 3.5 

IF you separate items with commas, separate commas.

 >>> np.average(list(map(float, meanNumbers.split(','))))  3.5 
+5
source share

This is not an answer (see @Sukrit Kalra's answer for this), but I see an opportunity to demonstrate how to write cleaner code that I cannot miss. You have a lot of code duplication, which will lead to difficult maintenance of the code in the future. Try instead:

 import sys import numpy as np welcomeString = input("Welcome to MMMR Calculator\nWhat would you like to calculate(Mean,Median,Mode,Range):") welcomeString = welcomeString.lower() # Lower once and for all # All averages need to do this numbers = input("What numbers would you like to use?:") numbers = list(map(float, numbers.split(','))) # As per Sukrit Kalra answer # Use a map to get the function you need average_function = { "mean": np.average, "median": np.median, "mode": np.mode, "range": np.arange, } # Print the result of the function by passing in the # pre-formatted numbers from input try: print (average_function[welcomeString](numbers)) except KeyError: sys.exit("You entered an invalid average type!") input() # Remove when you are done with development 
+5
source share

All Articles