【问题标题】:How to calculate mean in python?如何在python中计算平均值?
【发布时间】:2013-12-18 05:55:12
【问题描述】:

我有一个列表,我想为她计算平均值(平均值?)。 当我这样做时:

import numpy as np #in the beginning of the code

goodPix = ['96.7958', '97.4333', '96.7938', '96.2792', '97.2292']
PixAvg = np.mean(goodPix)

我收到此错误代码:

ret = um.add.reduce(arr, axis=axis, dtype=dtype, out=out, keepdims=keepdims)

TypeError: cannot perform reduce with flexible type

我试图寻求帮助,但没有找到有用的东西

谢谢大家。

【问题讨论】:

标签: python list numpy average mean


【解决方案1】:

这些东西仍然是字符串而不是浮点数。请尝试以下操作:

goodPix = ['96.7958', '97.4333', '96.7938', '96.2792', '97.2292']
gp2 = []
for i in goodPix:
    gp2.append(float(i))
numpy.mean(gp2)

【讨论】:

  • 我猜不出为什么有些答案会立即得到支持,所以那些 +8 对我来说也是个谜;至于你的答案,还不错,但我自己不会 +1,因为它比使用 numpy 的方法慢大约两倍,并且可以更短更清晰地重写为np.mean([float(i) for i in goodPix])
  • true,但比 numpy 方法慢两倍,我认为这意味着 2 纳秒而不是 1 纳秒?如果它不慢,不要让它更快?
  • @usethedeathstar 这取决于列表的长度。
【解决方案2】:

将您的列表从字符串转换为 np.float:

>>> gp = np.array(goodPix, np.float)
>>> np.mean(gp)
96.906260000000003

【讨论】:

  • 嗯,我知道你的解决方案可能更 Pythonic,但为什么我的 +7 有 n +0?
  • @usethedeathstar:我认为你必须接受这样一个事实,即在对一个答案投了赞成票之后,人们并没有义务对所有其他正确但低劣的答案进行投票。如果 alko 的出色答案不在这里,那么可以肯定,也许这 7 个人中的一些人会支持你的。
  • @SteveJessop 更重要的是,对于这样一个简单的答案,你会得到 +9,而对于一个两页长的答案,人们几乎不会超过 +3
  • @usethedeathstar:答案越明显正确,就越有能力判断它。可能不公平,但简短的答案往往会赢得比赛是不可避免的......
  • @SteveJessop 刚刚检查了你的最佳答案 (150+),都是屏幕长 :)
【解决方案3】:

使用列表推导

>>> np.mean([float(n) for n in goodPix])
96.906260000000003

【讨论】:

    【解决方案4】:

    如果您使用的是 python >= 3.4,则有一个统计库

    https://docs.python.org/3/library/statistics.html

    你可以像这样使用它的平均方法。假设您有一个数字列表,您希望找到其中的平均值:-

    list = [11, 13, 12, 15, 17]
    import statistics as s
    s.mean(list)
    

    它也有其他方法,例如标准差、方差、模式等。

    【讨论】:

      【解决方案5】:

      如果您不使用 numpy,计算值列表的 arithmetic mean 的明显方法是将所有元素的总和除以元素的数量,这很容易使用两个 built-ins @ 987654327@和len(),例如:

      >>> l = [1,3]
      >>> sum(l)/len(l)
      2.0
      

      如果列表元素是字符串,转换它们的一种方法是使用list comprehension

      >>> s = ['1','3']
      >>> l = [float(e) for e in s]
      >>> l
      [1.0, 3.0]
      

      对于整数结果,请使用 // 运算符 ("floored quotient of x and y") 或使用 int() 进行转换。

      对于许多其他解决方案,另请参阅Calculating arithmetic mean (one type of average) in Python

      【讨论】:

        猜你喜欢
        • 2011-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-26
        • 2019-02-07
        相关资源
        最近更新 更多