2015-09-23 86 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