我有一個這樣的陣列a
橫跨尺寸意味着:計算在2D陣列
a = [[40, 10], [50, 11]]
我需要分別計算平均每個維度,結果應該是這樣的:
[45,10.5]
45
是「a [*] [1]」的均值a[*][0]
和10.5
的均值。
什麼是解決這個問題的最優雅的方式,而不是一個循環?
我有一個這樣的陣列a
橫跨尺寸意味着:計算在2D陣列
a = [[40, 10], [50, 11]]
我需要分別計算平均每個維度,結果應該是這樣的:
[45,10.5]
45
是「a [*] [1]」的均值a[*][0]
和10.5
的均值。
什麼是解決這個問題的最優雅的方式,而不是一個循環?
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
如果你做了很多,NumPy是要走的路。
如果由於某種原因,你不能使用NumPy的:
>>> map(lambda x:sum(x)/float(len(x)), zip(*a))
[45.0, 10.5]
這裏是一個非numpy的解決方案:
>>> a = [[40, 10], [50, 11]]
>>> [float(sum(l))/len(l) for l in zip(*a)]
[45.0, 10.5]
感謝您的快速反應。 'In [n]:'是什麼意思?代碼的這一部分? – otmezger 2013-04-04 19:31:35
這是因爲我使用[IPython](http://ipython.org/)。 – askewchan 2013-04-04 19:32:10
我使用numpy,所以第2行和第3行很好,但是用'axis = 0'而不是'axis = 1' – otmezger 2013-04-04 19:32:16