【问题标题】:Using Numpy to find Mean,Median,Mode or Range of inputted set of numbers使用 Numpy 查找输入数字集的均值、中位数、众数或范围
【发布时间】:2013-07-26 14:33:20
【问题描述】:

我正在创建一个程序来查找平均值、中位数、众数或范围。当我运行它时,它工作正常,直到它进入计算答案的部分。它给了我一个“不能使用灵活类型减少预制件”的错误。我已经搜索了这个错误,但找不到我需要修复的内容。这是我第一次使用 numpy,所以任何帮助都会很棒。

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()

【问题讨论】:

  • 当我这样做并找到 1,2,3,4 的平均值时,它会在 0x02330858 处打印出函数平均值。这是什么意思?
  • 如果您在变量中捕捉到第一个问题的答案,您可以避免将第二个问题写四次。还有,四个选项中最后一个input()是关于什么的?
  • 抓住答案是什么意思。我把最后一个 input() 放在那里来停止程序,这样我就可以在窗口关闭之前看到输出。
  • np.arange 真的计算范围吗?!我虽然它应该在一个范围内生成数字?!

标签: python numpy


【解决方案1】:

您正在向不允许的函数传递一个字符串。

>>> 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

你需要用它们创建一个数组或一个列表。

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

如果您用逗号分隔元素,请按逗号分隔。

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

【讨论】:

  • 您能否提供更多有关 map 和 float 的信息,因为当我尝试您发布的内容时,我得到“不支持的操作数类型错误”。
  • 你能发布完整的回溯吗?
  • 您只需发布执行该行代码时获得的任何内容。
  • 你的意思是文件 "C:\Progr" 行还是 ret = ret / float(rcount)
  • "C:\Program Files\Microsoft Visual Studio 11.0\Common7\IDE\Extensions|Microsoft\Python Tools for Visual Studio\2.0\visualstudio_py_util" 第 70 行,在 exec_file exec(code_obj, global_variables)
【解决方案2】:

这不是一个答案(请参阅@Sukrit Kalra 对此的回复),但我看到了一个机会来演示如何编写我无法放弃的更简洁的代码。您有大量的代码重复,这将导致将来难以维护代码。试试这个:

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's 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

【讨论】:

  • 谢谢,这对将来肯定会有所帮助。至于 stop = input(),它让我在代码窗口关闭之前看到输出。这很糟糕吗?
  • 对于开发,我想它是可以的,但如果你打算与任何人分享它,我当然不会保留它。如果从命令行运行则不需要。
  • 嘿,当您编辑代码时,我尝试运行它并得到“不支持的操作数类型:/ for 'map' and 'float'。这可能是什么原因?
  • 您需要具体说明您提供的输入以及您的代码是什么。请相应地编辑问题。
  • 我在我的代码中使用了他的解决方案。根据他的解决方案的 cmets,您似乎已经让它工作了。我同意 Sukrit 的观点,您需要向我们提供一个示例,说明当程序提示您“您想使用哪些数字?:”时您将输入的内容
猜你喜欢
  • 2016-05-31
  • 2021-04-14
  • 1970-01-01
  • 2011-05-10
  • 1970-01-01
  • 2015-04-13
  • 1970-01-01
  • 2017-02-20
  • 1970-01-01
相关资源
最近更新 更多