2011-01-07 2 views

답변

7
import numpy as np 

a = np.array([[1, 5, 6], 
       [2, 4, 1], 
       [3, 1, 5]]) 

np.ma.MaskedArray(a, mask=(np.ones_like(a)*(a[:,0]==1)).T) 

# Returns: 
masked_array(data = 
[[-- -- --] 
[2 4 1] 
[3 1 5]], 
      mask = 
[[ True True True] 
[False False False] 
[False False False]]) 
2

는 다음과 같은 방법으로

mask = numpy.repeat(a[:,0]==1, a.shape[1]) 

및 마스크 배열하여 원하는 마스크를 만들 수 있습니다

masked_a = numpy.ma.array(a, mask=numpy.repeat(a[:,0]==1, a.shape[1])) 
+0

답장을 보내 주셔서 감사합니다! Sven! 나는 numpy을 처음 접했고 반복적 인 방법을 알지 못했다. 그것을 찾을 것입니다. – Curious2learn

0
당신은 단순히 빈 마스크를 만든 다음 @eumiro처럼 (NumPy와-방송을 사용할 수

보여 주었다)하지만 요소 및 비트 연산자 "or"를 사용하여 | :

>>> a = np.array([[1, 5, 6], [2, 4, 1], [3, 1, 5]]) 

>>> mask = np.zeros(a.shape, bool) | (a[:, 0] == 1)[:, None] 

>>> np.ma.array(a, mask=mask) 
masked_array(data = 
[[-- -- --] 
[2 4 1] 
[3 1 5]], 
      mask = 
[[ True True True] 
[False False False] 
[False False False]], 
     fill_value = 999999) 
이 방법의

>>> # select first column 
>>> a[:, 0] 
array([1, 2, 3]) 

>>> # where the first column is 1 
>>> a[:, 0] == 1 
array([ True, False, False], dtype=bool) 

>>> # added dimension so that it correctly broadcasts to the empty mask 
>>> (a[:, 0] == 1)[:, None] 
array([[ True], 
     [False], 
     [False]], dtype=bool) 

>>> # create the final mask 
>>> np.zeros(a.shape, bool) | (a[:, 0] == 1)[:, None] 
array([[ True, True, True], 
     [False, False, False], 
     [False, False, False]], dtype=bool) 

하나 더 장점은 그래서 매우 빠른해야 잠재적으로 비용이 곱셈 또는 np.repeat를 사용할 필요가 없다는 것입니다 :

A는 자세한 설명을 비트.