데이터 사이언스/데이터 사이언스 코딩
NumPy 브로드캐스팅(Broadcasting) 마스크(Mask) 팬시 인덱스(Fancy Indexing) 데이터 분석 벡터화 연산
윤슬새벽
2025. 7. 17. 11:17
반응형
✅ 1. 브로드캐스팅 (Broadcasting)
📌 정의
브로드캐스팅이란, 서로 다른 shape을 가진 배열들끼리도 연산이 가능하도록 자동으로 shape을 맞춰주는 NumPy의 기능입니다.
📐 규칙 요약
- 작은 배열의 shape이 큰 배열의 shape에 자동으로 확장됩니다.
- 하지만 일정한 규칙을 따라야 합니다.
📊 예시
import numpy as np
a = np.array([1, 2, 3]) # shape: (3,)
b = np.array([[10], [20], [30]]) # shape: (3, 1)
result = a + b # shape: (3, 3)
print(result)
🧠 내부 동작 (브로드캐스팅 규칙)
- a: (3,) → (1, 3)
- b: (3, 1)
- 두 배열이 자동으로 (3, 3)으로 맞춰지고 element-wise 연산 수행
🖨 출력
[[11 12 13]
[21 22 23]
[31 32 33]]
✅ 2. 마스크 (Mask) — Boolean Indexing
📌 정의
배열 내의 조건식을 기반으로 원하는 값만 필터링하는 방법입니다.
조건문 결과가 Boolean 배열(True/False)로 반환되고, 이를 마스크라고 부릅니다.
📊 예시
import numpy as np
x = np.array([5, 10, 15, 20, 25])
mask = x > 15 # [False, False, False, True, True]
filtered = x[mask] # True인 값만 선택
print(filtered)
🖨 출력
[20 25]
✔ 응용 예제
x[x % 2 == 0] # 짝수만 필터링
✅ 3. 팬시 인덱싱 (Fancy Indexing)
📌 정의
정수 배열 또는 리스트를 사용해 특정 인덱스 위치의 값을 한 번에 추출하는 기법입니다.
슬라이싱(:)보다 더 유연합니다.
📊 예시
import numpy as np
x = np.array([10, 20, 30, 40, 50])
idx = [0, 2, 4]
print(x[idx])
🖨 출력
[10 30 50]
✔ 2D 배열 예제
a = np.array([[11, 12], [21, 22], [31, 32]])
rows = [0, 2]
cols = [1, 0]
print(a[rows, cols]) # (0,1), (2,0) 위치
🖨 출력
[12 31]
🧠 요약 비교표
기능 | 설명 | 예시 |
브로드캐스팅 | 서로 다른 shape 간 자동 연산 확대 | a + b where shape ≠ |
마스크 | 조건문 기반 필터링 | x[x > 5] |
팬시 인덱싱 | 정수 배열로 원하는 위치 추출 | x[[0, 2, 4]] |
🎯 언제 써야 할까?
상황사용 | 도구 | 이유 |
두 배열의 shape이 다를 때 연산 | 브로드캐스팅 | 자동 확장 연산 |
조건에 맞는 값만 추출하고 싶을 때 | 마스크 | 조건 필터링 |
특정 인덱스의 값들만 추출하고 싶을 때 | 팬시 인덱싱 | 원하는 위치만 한 번에 |
반응형