计算二维数组中维度的均值


80

我有一个a像这样的数组:

a = [[40, 10], [50, 11]]

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

[45, 10.5]

45作为平均值的a[*][0]10.5平均的a[*][1]

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

Answers:


126

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])

或者,作为独立功能:

In [5]: np.mean(a, axis=1)
Out[5]: array([ 25. ,  30.5])

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

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

In [7]: a[:,1].mean() # second column
Out[7]: 10.5

谢谢你快速的回复。什么In [n]:意思 这是代码的一部分吗?
otmezger 2013年

我使用的是numpy,因此第2行和第3行效果很好,但是使用axis=0代替axis=1
otmezger 2013年

@otmezgeraxis=0在下一行。我编辑以显示更多信息,也许刷新?
askewchan

1
@otmezger不客气。请注意,许多numpy数组方法都采用这样的axis参数。
askewchan

@askewchan:mean = np.mean(a, axis=(0,2,3)) mean? 知道输入张量(a)的形状(批,通道,宽度,高度)怎么办?
丽卡

11

这是一个非numpy的解决方案:

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

4

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

如果由于某种原因您不能使用NumPy:

>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.