2013-12-12 50 views
1

是否有一种方便的方法将另一个具有实际值的阵列添加到另一个阵列中的屏蔽位置?将两个numpy屏蔽阵列加在一起

import numpy as np 
arr1 = np.ma.array([0,1,0], mask=[True, False, True]) 
arr2 = np.ma.array([2,3,0], mask=[False, False, True]) 
arr1+arr2 

Out[4]: 
masked_array(data = [-- 4 --], 
     mask = [ True False True], 
    fill_value = 999999) 

注:在ARR2 2没有被屏蔽的值 - >应所得阵列 在结果应该是[2,4, - ]。我认为必须有一个简单的解决方案呢?

+0

我觉得你的问题让人困惑。你输入的数据是'[ - 4 - ]',你期望'[2,4, - ]'作为输出吗?它背后的逻辑是什么? –

+1

arr2中的值2没有被屏蔽,所以它应该包含在结果中。为什么arr1中的面具“赢”? – HyperCube

+0

也加了蒙版,'bool(False + True)'为真 –

回答

5

试试这个(选择要使用你的面具从http://docs.python.org/3/library/operator.html逻辑运算)

>>> from operator import and_ 
>>> np.ma.array(arr1.data+arr2.data,mask=map(and_,arr1.mask,arr2.mask)) 
masked_array(data = [2 4 --], 
      mask = [False False True], 
     fill_value = 999999) 

在Python 3,map()返回一个迭代器,而不是一个列表,所以需要添加list()

>>> np.ma.array(arr1.data+arr2.data,mask=list(map(and_,arr1.mask,arr2.mask))) 
+0

谢谢!这样可行。 – HyperCube