본문 바로가기
Python/알고리즘

[numpy.ma] Numpy로 array masking 하는 방법

by 고독한석사생 2025. 8. 4.

오늘은 numpy masking 방법에 대해 알아본다.

masking은 array에서 일부 element를 무시하는 역할을 한다.


 

numpy array masking

numpy에서 조건을 만족하지 않는 배열의 일부를 연산에서 제외시키거나 표현을 하고 싶지 않을 때 사용한다.

indexing은 완전히 미충족 조건인 요소를 filter 하는 것이라면 masking은 가져가되 연산에만 사용하지 않는 것이다.

import numpy as np

data = np.array([10, 20, 30, 40, 50])

# 예: 30보다 큰 값은 무시 (마스크 처리)
masked = np.ma.masked_greater(data, 30)

print(masked)  
# [10 20 30 -- --]   # 마스킹된 값은 --로 표시됨

# 마스킹된 값은 연산에서 자동으로 제외됨
print(masked.mean())  # 20.0


"""
masked_array(data=[10, 20, 30, --, --],
             mask=[False, False, False,  True,  True],
       fill_value=999999)
"""

 

 

직접 mask라는 boolen 배열을 만들어 사용할 수 있다.

조건식을 주기 애매할 때, 원하는 boolen 배열을 할당하면 좋을 것 같다.

mask = np.array([False, False, True, True, True])
masked = np.ma.array(data, mask=mask)
print(masked)
# [10 20 -- -- --]

 

 

내가 보기엔 대체로 이 것을 자주 쓸 것 같다.

array를 주고, 내가 원하는 조건만 줘서 아닌 것들은 masking 시키는 것이다.

np.ma.array(data, mask=data>=30)

"""
masked_array(data=[10, 20, --, --, --],
             mask=[False, False,  True,  True,  True],
       fill_value=999999)
"""

 


반응형

pandas에서 masked elements 대체

"--"는 numpy에서만 특별한 존재다. 다른 곳에서는 문자열로 인식한다.

"--"를 통해 numpy에서 출력 시 masked되었다는 사실을 쉽게 알려주는 역할을 할 뿐이다.

 

pandas에서 --를 nan값으로 바꿔 분석할거면 아래를 사용해도 된다.

df.replace('--', np.nan, inplace=True)

 

 

indexing을 통해 filter하게 되면 그 요소는 날아가버리니까, 그 자리에 masked로 연산을 제외만 시키는 것도 꽤나 유용한 방법이다.

다시 불러오고 싶으면 fill로 살리면 된다.

 

 


masked element를 특정 값으로 대체

masked.filled(0)  
# → array([10, 20, 30, 0, 0])  # --가 0으로 대체됨
반응형