본문 바로가기
데이터 사이언스/데이터 사이언스 코딩

NumPy 브로드캐스팅(Broadcasting) 마스크(Mask) 팬시 인덱스(Fancy Indexing) 데이터 분석 벡터화 연산

by 윤슬새벽 2025. 7. 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이 다를 때 연산 브로드캐스팅 자동 확장 연산
조건에 맞는 값만 추출하고 싶을 때 마스크 조건 필터링
특정 인덱스의 값들만 추출하고 싶을 때 팬시 인덱싱 원하는 위치만 한 번에
 

반응형