2015-02-09 103 views
1

我正在与numpy masked arrays并且有一个微不足道的操作我无法弄清楚如何以一种简单的方式做到这一点。如果我有两个被屏蔽的数组,我怎样才能将它们聚合到另一个只包含未屏蔽值的数组?聚合numpy蒙面阵列

In [1]: import numpy as np 

In [2]: np.ma.array([1, 2, 3], mask = [0,1,1]) 
Out[2]: 
masked_array(data = [1 -- --], 
      mask = [False True True], 
     fill_value = 999999) 

In [3]: np.ma.array([4, 5, 6], mask = [1,1,0]) 
Out[3]: 
masked_array(data = [-- -- 6], 
      mask = [ True True False], 
     fill_value = 999999) 

,如果我想,我应该适用于之前的阵列哪个操作:

masked_array(data = [1 -- 6], 
      mask = [False True False], 
     fill_value = 999999) 
+0

这两个数组都包含相同的项目? – 2015-02-09 10:18:59

+0

不一定,它只是两个非常简单的屏蔽阵列的例子。 – MonkeyButter 2015-02-09 10:22:24

回答

1

堆栈掩码并使用numpy.dstack阵列,并创建一个新的屏蔽数组,然后就可以得到所需要的输出使用numpy.prod

>>> a1 = np.ma.array([1, 2, 3], mask = [0,1,1]) 
>>> a2 = np.ma.array([7, 8, 9], mask = [1,1,0]) 
>>> arr = np.ma.array(np.dstack((a1, a2)), mask=np.dstack((a1.mask, a2.mask))) 
>>> np.prod(arr[0], axis=1) 
masked_array(data = [1 -- 9], 
      mask = [False True False], 
     fill_value = 999999) 
+0

结果数组的形状为6,它是初始数组形状的两倍。对不起,但这并没有回应我的问题。 – MonkeyButter 2015-02-09 11:40:28

+0

@MonkeyButter更新。 – 2015-02-09 12:05:00