【发布时间】:2013-03-27 01:05:06
【问题描述】:
我有一个这样的数组a:
a = [[40, 10], [50, 11]]
我需要分别计算每个维度的平均值,结果应该是这样的:
[45, 10.5]
45 是 a[*][0] 的平均值,10.5 是 a[*][1] 的平均值。
不使用循环解决这个问题的最优雅的方法是什么?
【问题讨论】:
标签: python arrays multidimensional-array numpy mean
我有一个这样的数组a:
a = [[40, 10], [50, 11]]
我需要分别计算每个维度的平均值,结果应该是这样的:
[45, 10.5]
45 是 a[*][0] 的平均值,10.5 是 a[*][1] 的平均值。
不使用循环解决这个问题的最优雅的方法是什么?
【问题讨论】:
标签: python arrays multidimensional-array numpy mean
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]: 是什么意思?是这部分代码吗?
axis=0 而不是 axis=1
axis=0 在下一行。我编辑显示更多信息,刷新,也许?
mean = np.mean(a, axis=(0,2,3)) mean? knowing that input tensor (a) is shape (batch,channel,width,height) 是什么意思?
这是一个非 numpy 的解决方案:
>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]
【讨论】:
如果您经常这样做,NumPy 是您的最佳选择。
如果由于某种原因你不能使用 NumPy:
>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
【讨论】: