2015-02-09 149 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