브로드캐스팅(broadcasting)은 NumPy의 가장 영리한 기능 중 하나로, 「모양이 다른 배열들 간의 연산을 자동으로 맞춰 처리」해 줍니다.
명시적 반복 없이 직관적인 코드를 작성할 수 있게 해 줍니다.
기본 예시.
arr = np.array([1, 2, 3]); arr + 10 — [11, 12, 13].
스칼라 10이 자동으로 [10, 10, 10]으로 「방송(broadcast)」되어 모든 요소에 더해진 것입니다.
명시적 for 반복이 사라집니다.
더 복잡한 예시.
matrix = np.array([[1,2,3], [4,5,6]]); row = np.array([10, 20, 30]); matrix + row — 각 행에 row가 더해짐.
결과 [[11,22,33], [14,25,36]].
row가 「2번 복제되어」 matrix와 같은 모양이 된 효과입니다.
규칙.
두 배열의 끝 차원부터 비교.
1) 같은 크기면 OK.
2) 한쪽이 1이면 다른 쪽 크기로 확장.
3) 둘 다 다르면 오류.
이 규칙을 알면 대부분의 브로드캐스팅을 직관적으로 이해할 수 있습니다.
활용.
데이터 정규화 — (data - data.mean(axis=0)) / data.std(axis=0).
한 줄로 「열별 평균을 빼고 표준편차로 나누기」.
거리 계산 — (X[:,np.newaxis] - X)**2 — 모든 점 쌍의 차이.
익숙해지면 「머릿속의 수식이 그대로 코드로」 옮겨집니다.
한 줄 요약
브로드캐스팅은 모양이 다른 NumPy 배열의 연산을 자동으로 맞춰 처리합니다.
스칼라+배열, 벡터+행렬 같은 연산이 자연스럽게 되어 명시적 반복이 사라집니다.
더 알아볼 것
- np.newaxis — 차원 추가
- 브로드캐스팅 함정 — 의도하지 않은 차원
- einsum — 더 명시적인 연산