如何在Python中计算平均值?

7
我是一名能翻译文本的助手。
我有一个列表,想要计算其中值的平均数(mean?)。 当我这样做时:
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中计算算术平均数(一种平均数类型) - handle
5个回答

10

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

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

嗯,我明白你的解决方案可能更符合Python的风格,但为什么我的代码中要+0而不是+7呢? - usethedeathstar
@usethedeathstar:我认为你必须接受这样一个事实,即在点赞了一个答案之后,人们并不一定有责任点赞其他正确但次优的答案。如果alko的更好的答案不存在,那么可能其中的一些7个人会点赞你的答案。 - Steve Jessop
@SteveJessop,更重要的是对于这样一个简单的答案,你会得到+9的赞,而对于一个长达两页的答案,人们很少能超过+3。 - usethedeathstar
1
@usethedeathstar: 答案越明显正确,越容易受到人们的评判。这可能并不公平,但简短的答案往往会在比赛中获胜... - Steve Jessop
@SteveJessop 刚刚查看了你的顶级答案(150+),全部都是屏幕长的 :) - alko
@alko:对于我的底部回答,可能也是同样的情况,我倾向于冗长 :-) - Steve Jessop

3
如果您使用的是Python >= 3.4,那么有一个与统计相关的库可供使用。您可以像这样使用它的均值方法。假设您有一个数字列表,您想要找到它们的平均值:

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

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

它还有其他方法,如stdev、variance、mode等。


2
这些值仍然是字符串而不是浮点数。请尝试以下操作:
goodPix = ['96.7958', '97.4333', '96.7938', '96.2792', '97.2292']
gp2 = []
for i in goodPix:
    gp2.append(float(i))
numpy.mean(gp2)

我猜不出为什么有些答案会立即得到赞同,所以那些+8对我来说是个谜; 至于你的答案,它还不错,但我自己不会点赞,因为它比使用numpy的方法慢了两倍,并且可以重写为更短更清晰的代码 np.mean([float(i) for i in goodPix]) - alko
返回翻译的文本:与numpy方法相比,速度确实会变慢两倍,我想这意味着需要2纳秒而不是1纳秒?如果它不慢,就不要让它更快? - usethedeathstar
@usethedeathstar 这取决于列表的长度。 - Steinar Lima

0

如果您没有使用numpy,计算值列表的算术平均数的明显方法是将所有元素的总和除以元素数量,这可以使用两个内置函数sum()len()轻松实现,例如:

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

如果列表元素是字符串,一种将它们转换的方法是使用列表推导式

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

如果需要整数结果,请使用 // 运算符("x 和 y 的向下取整商"),或使用 int() 进行转换。

对于许多其他解决方案,也可以参见 在 Python 中计算算术平均值(一种平均值类型)


0

使用列表推导式

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接