Python NumPy中的np.mean()与np.average()?

浏览 28关注 0回答 5得票数 225
原文

我注意到

In [30]: np.mean([1, 2, 3])
Out[30]: 2.0

In [31]: np.average([1, 2, 3])
Out[31]: 2.0

但是,应该有一些区别,因为它们毕竟是两个不同的功能。

它们之间有什么区别?

原文
kmario23修改于2019-04-28 06:44

5 个回答

高票数最新
Prashant Kumar
回答于2013-11-19 01:50
得票数 3

在您的调用中,这两个函数是相同的。

不过,average可以计算加权平均值。

文档链接:meanaverage

Amber
回答于2013-11-19 01:50
得票数 38

np.mean总是计算算术平均值,并且有一些额外的输入和输出选项(例如,使用什么数据类型,将结果放在哪里)。

如果提供了weights参数,则np.average可以计算加权平均值。

Hammer
修改于2017-11-28 05:47
已采纳
得票数 206

np.average接受一个可选的权重参数。如果没有提供,则它们是等效的。看一下源代码:MeanAverage

np.mean:

try:
    mean = a.mean
except AttributeError:
    return _wrapit(a, 'mean', axis, dtype, out)
return mean(axis, dtype, out)

np.average:

...
if weights is None :
    avg = a.mean(axis)
    scl = avg.dtype.type(a.size/avg.size)
else:
    #code that does weighted mean here

if returned: #returned is another optional argument
    scl = np.multiply(avg, 0) + scl
    return avg, scl
else:
    return avg
...
G M
修改于2018-12-06 23:11
得票数 27

在某些版本的numpy中,您必须意识到另一个重要的区别:

average不考虑掩码,因此计算整个数据集的平均值。

mean考虑了掩码,因此仅计算未掩码的值的平均值。

g = [1,2,3,55,66,77]
f = np.ma.masked_greater(g,5)

np.average(f)
Out: 34.0

np.mean(f)
Out: 2.0
Grant Petty
修改于2020-05-20 01:28
得票数 10

除了已经提到的差异之外,还有另一个非常重要的差异,这是我刚刚通过艰难的方式发现的:与np.mean不同,np.average不允许dtype关键字,这在某些情况下对于获得正确的结果是必不可少的。我有一个从h5文件访问的非常大的单精度数组。如果我沿着轴0和1取平均值,除非我指定dtype='float64',否则我会得到非常错误的结果

>T.shape
(4096, 4096, 720)
>T.dtype
dtype('<f4')

m1 = np.average(T, axis=(0,1))                #  garbage
m2 = np.mean(T, axis=(0,1))                   #  the same garbage
m3 = np.mean(T, axis=(0,1), dtype='float64')  # correct results

不幸的是,除非你知道要找什么,否则你不一定能断定你的结果是错的。出于这个原因,我再也不会使用np.average了,但在任何大型数组上都会使用np.mean(.., dtype='float64')。如果我想要一个加权平均值,我将使用权重向量和目标数组的乘积,然后根据需要使用np.sumnp.mean (也具有适当的精度)来显式计算它。

页面原文内容由Sibbs Gambling、kmario23、Prashant Kumar、Amber、Hammer、Geoff、FooBar、G M、Neil G、Grant Petty、Sanjay Manohar、kosnik提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:https://stackoverflow.com/questions/20054243复制

扫码关注云+社区

领取腾讯云代金券