당신은 단순히 빈 마스크를 만든 다음 @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는 자세한 설명을 비트.
답장을 보내 주셔서 감사합니다! Sven! 나는 numpy을 처음 접했고 반복적 인 방법을 알지 못했다. 그것을 찾을 것입니다. – Curious2learn