2012-11-08 176 views
3

我在努力工作,我有一個像相同的大小和形狀的數組數: a= [153 186 0 258] b=[156 136 156 0] c=[193 150 950 757] 我想有平均數組,但我想該程序忽略計算中的零值。所以,這個例子的結果數組將是:d=[167.333 157.333 553 507.5] 這是這個計算的結果:d=[(153+156+193)/3 (186+136+150)/3 (156+950)/2 (258+757)/2]。有可能這樣做嗎?數組的平均數與numpy沒有考慮零值

回答

12
>>> import numpy as np 
>>> a = np.array([153, 186, 0, 258]) 
>>> b = np.array([156, 136, 156, 0]) 
>>> c = np.array([193, 150, 950, 757]) 
>>> [np.mean([x for x in s if x]) for s in np.c_[a, b, c]] 
[167.33333333333334, 157.33333333333334, 553.0, 507.5] 

或者,也許一個更好的選擇:

>>> A = np.vstack([a,b,c]) 
>>> np.average(A, axis=0, weights=A.astype(bool)) 
array([ 167.33333333, 157.33333333, 553.  , 507.5  ]) 
+4

+1的替代 – JoshAdel

+0

大!謝謝。 –

+0

我的數組是1200 * 1200,我試圖在問題中簡化它。它似乎不適用於具有多行的數組。我怎樣才能做到這一點? –