Boolean Masking: 조건에 따라 배열의 요소를 선택할 수 있는 Numpy의 기능
데이터 분석과 처리에서 자주 사용되며, 특정 조건을 만족하는 요소들을 쉽게 필터링할 수 있다.
Boolean mask: True와 False로 이루어진 배열
mask 배열을 원본 배열에 적용하면 True에 해당하는 요소들만 선택되어 필터링 된다.
element-wise로 대응해 처리하기 때문에 원본 배열과 masking배열의 shape은 같아야한다.
import numpy as np
arr = np.array([10, 15, 20, 25, 30])
mask = arr > 20 # masking배열 생성
newArr = arr[mask] # 원본 배열에 masking배열 적용
print(newArr)
## 출력
[25,30]
다음과 같이 masking배열을 활용해서 원본 배열의 값을 변경할 수도 있다.
import numpy as np
arr = np.array([10, 15, 20, 25, 30])
arr[arr > 20] = 0 # 20보다 큰 원소들을 모두 0으로 변경
print(arr)
## 출력
[10, 15, 20, 0, 0]
여러 조건을 결합해서 masking배열을 만들 때는 &(and), |(or), ~(not) 연산자를 사용한다.
arr = np.array([10,20,25,40,50])
mask = (arr < 20) | (arr > 25)
print(arr[mask])
조건을 만족하는 값 대신 인덱스를 얻고 싶다면 np.where을 사용하면 된다.(반환 튜플)
arr = np.array([10,20,30,40,50])
indices = np.where(arr > 20)
print(indices)
## 출력
(array([2, 3, 4]),)
예시로 대각선의 원소들만을 masking을 이용해 추출해보자
# 원본 배열의 크기가 5*5라면
diagonal_mask = (np.eye(5) == 1)
arr = np.arange(1,26).reshape(5,5)
arr[~diagonal_mask] = 0 ## 대각원소만 추출
## 출력
[[ 1 0 0 0 0]
[ 0 7 0 0 0]
[ 0 0 13 0 0]
[ 0 0 0 19 0]
[ 0 0 0 0 25]]
eye메소드를 이용해 단위행렬을 생성하고 원소의 값이 1인 부분만 추출하여 masking배열을 생성할 수 있다.
위와 같이 대각선의 원소들만 추출할 수도 있다.
'💂군대 > KAIST ICT Academy' 카테고리의 다른 글
[Pandas] Series와 DataFrame (1) | 2024.11.22 |
---|---|
[Numpy] Random Number generation (2) | 2024.11.10 |
[Numpy] Array Indexing (2) | 2024.11.09 |
[Numpy] Broadcasting (0) | 2024.11.03 |
[Numpy] Array manipulation (0) | 2024.11.02 |