计算2D阵列中的尺寸平均值

otm*_*ger 63 python arrays numpy mean multidimensional-array

我有这样一个数组a:

a = [[40, 10], [50, 11]]
Run Code Online (Sandbox Code Playgroud)

我需要分别计算每个维度的平均值,结果应为:

[45, 10.5]
Run Code Online (Sandbox Code Playgroud)

45是平均a[*][0]10.5平均a[*][1].

在不使用循环的情况下解决此问题的最优雅方法是什么?

ask*_*han 103

a.mean()采取axis论点:

In [1]: import numpy as np

In [2]: a = np.array([[40, 10], [50, 11]])

In [3]: a.mean(axis=1)     # to take the mean of each row
Out[3]: array([ 25. ,  30.5])

In [4]: a.mean(axis=0)     # to take the mean of each col
Out[4]: array([ 45. ,  10.5])
Run Code Online (Sandbox Code Playgroud)

或者,作为独立功能:

In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. ,  30.5])
Run Code Online (Sandbox Code Playgroud)

切片不起作用的原因是因为这是切片的语法:

In [6]: a[:,0].mean() # first column
Out[6]: 45.0

In [7]: a[:,1].mean() # second column
Out[7]: 10.5
Run Code Online (Sandbox Code Playgroud)


And*_*ark 8

这是一个非numpy解决方案:

>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]
Run Code Online (Sandbox Code Playgroud)


NPE*_*NPE 6

如果您经常这样做,NumPy就是您的最佳选择。

如果由于某种原因你无法使用 NumPy:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
Run Code Online (Sandbox Code Playgroud)