2015-09-23 89 views
2

這是我的拳頭帖子overflow,所以請耐心等待。 當然,我試圖在網上找到答案,但沒有成功。numpy中的蒙面陣列操作

問題:

In [1]: import numpy 
In [2]: import numpy.ma as ma 
In [4]: a = ma.array([[[1,2],[3,4]],[[1,2],[3,4]]], mask=[[[True,False],[False,False]],[[False,False],[False,True]]]) 
In [5]: a 
Out[5]: 
masked_array(data = 
[[[-- 2] 
    [3 4]] 

[[1 2] 
    [3 --]]], 
      mask = 
[[[ True False] 
    [False False]] 

[[False False] 
    [False True]]], 
     fill_value = 999999) 

In [6]: ma.mean(a, axis=0) 
Out[6]: 
masked_array(data = 
[[1.0 2.0] 
[3.0 4.0]], 
      mask = 
[[False False] 
[False False]], 
     fill_value = 1e+20) 

但我希望平均函數返回蒙面的輸出,如;

In [7]: (a[0]+a[1])/2 
Out[7]: 
masked_array(data = 
[[-- 2] 
[3 --]], 
      mask = 
[[ True False] 
[False True]], 
     fill_value = 999999) 

我在這裏做錯了什麼?

回答

2

屏蔽陣列忽略屏蔽值,他們做而不是傳播掩碼。爲了得到你想要的結果,你可以這樣做:

>>> np.ma.array(a.data.mean(axis=0), mask=a.mask.any(axis=0)) 
masked_array(data = 
[[-- 2.0] 
[3.0 --]], 
      mask = 
[[ True False] 
[False True]], 
     fill_value = 1e+20) 
+0

感謝@ behzad.nouri 我喜歡'.mask.any()'方法,因爲它可以在任何系列的數學運算後應用。 – Achim