2013-12-12 5 views
1

실제 값을 가진 다른 배열을 다른 배열의 마스크 된 위치에 추가하는 편리한 방법이 있습니까?마스크 된 배열 두 개를 모두 더하기

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) 

주 : 2 마스킹되지 않은 값에 arr2 -> 결과이어야 결과 배열 이어야 [2, 4, -]. 나는 이것을위한 쉬운 해결책이 있어야한다고 생각할 것입니까?

+0

혼란스러운 점이 있습니다. 데이터를'[- 4 -]'로 입력하면'[2, 4, -]'가 출력으로 기대됩니까? 그것 뒤에있는 논리는 무엇입니까? –

+1

arr2의 값 2는 마스크 처리되지 않으므로 결과에 포함되어야합니다. arr1의 가면이 왜 "이기는가"? – HyperCube

+0

마스크도 추가되고'bool (False + True)'는 True입니다. –

답변

5

이이 list()를 추가 할 필요가 있으므로

>>> 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) 

파이썬 3에서, map(), 반복자가 아닌 목록을 반환합니다 (당신이 http://docs.python.org/3/library/operator.html에서 마스크에 사용할 논리 연산자를 선택)을보십시오 :

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

감사합니다! 그거야. – HyperCube

관련 문제