我注意到
In [30]: np.mean([1, 2, 3])
Out[30]: 2.0
In [31]: np.average([1, 2, 3])
Out[31]: 2.0
但是,应该有一些区别,因为它们毕竟是两个不同的功能。
它们之间有什么区别?
发布于 2020-05-20 01:23:02
除了已经提到的差异之外,还有另一个非常重要的差异,这是我刚刚通过艰难的方式发现的:与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.sum
或np.mean
(也具有适当的精度)来显式计算它。
https://stackoverflow.com/questions/20054243
复制相似问题