브로드캐스팅
브로드캐스팅(Broadcasting)은 서로 다른 shape의 배열 간 산술 연산을 가능하게 하는 NumPy의 핵심 메커니즘입니다. 명시적으로 배열을 복제하지 않고도 shape이 다른 배열 간 연산을 수행할 수 있어, 메모리 효율성과 코드 간결성을 동시에 얻을 수 있습니다.학습 목표
- 브로드캐스팅이 적용되는 조건(호환 규칙)을 설명할 수 있다
- 브로드캐스팅의 3단계 규칙을 적용하여 연산 결과의 shape을 예측할 수 있다
- 실무에서 브로드캐스팅을 활용하여 효율적인 배열 연산을 작성할 수 있다
왜 중요한가
ML에서는 피처 행렬의 각 열에 서로 다른 스케일링을 적용하거나, 배치 데이터에 동일한 변환을 적용하는 등 shape이 다른 배열 간 연산이 빈번합니다. 브로드캐스팅을 이해하면 반복문 없이 이 모든 연산을 한 줄로 처리할 수 있습니다.브로드캐스팅 규칙
두 배열의 shape을 뒤쪽(오른쪽) 차원부터 비교하며, 다음 세 가지 규칙을 순서대로 적용합니다.규칙 요약
| 규칙 | 설명 | 예시 |
|---|---|---|
| 규칙 1 | 차원 수가 다르면, 적은 쪽 앞에 크기 1인 차원 추가 | (3,) -> (1, 3) |
| 규칙 2 | 각 차원의 크기가 같거나, 한쪽이 1이면 호환 | (3, 1) + (1, 4) -> 호환 |
| 규칙 3 | 크기가 1인 차원은 상대방 크기에 맞게 확장 | (3, 1) -> (3, 4) |
예시로 이해하기
호환되지 않는 경우
실무 활용 패턴
피처 정규화 (Z-score)
거리 행렬 계산
원-핫 인코딩
AI/ML에서의 활용
- 배치 정규화: 배치 내 각 피처의 평균/분산으로 정규화할 때 브로드캐스팅이 핵심입니다
- 손실 함수 계산: 예측값과 실제값의 차이를 배치 전체에 대해 한 번에 계산합니다
- 어텐션 메커니즘: 쿼리와 키 벡터 간 유사도 계산에 브로드캐스팅이 활용됩니다
- 데이터 증강: 전체 데이터셋에 동일한 변환(평균 빼기, 스케일링 등)을 적용합니다
브로드캐스팅이 메모리를 추가로 사용하나요?
브로드캐스팅이 메모리를 추가로 사용하나요?
아닙니다. 브로드캐스팅은 실제로 배열을 복제하지 않습니다. 내부적으로 stride 트릭을 사용하여 마치 복제된 것처럼 연산합니다. 따라서
np.tile()이나 np.repeat()로 명시적으로 복제하는 것보다 훨씬 메모리 효율적입니다.브로드캐스팅 에러가 발생하면 어떻게 해결하나요?
브로드캐스팅 에러가 발생하면 어떻게 해결하나요?
np.newaxis나 reshape()를 사용하여 한쪽 배열에 크기 1인 차원을 추가하세요. 예를 들어 (3,) shape의 배열을 (3, 1)로 바꾸면 (3, 4) 배열과 연산할 수 있습니다.체크리스트
- 브로드캐스팅의 3단계 규칙을 설명할 수 있다
- 두 배열의 shape을 보고 브로드캐스팅 가능 여부를 판단할 수 있다
- 연산 결과의 shape을 예측할 수 있다
-
np.newaxis를 활용하여 차원을 추가하고 브로드캐스팅을 유도할 수 있다 - 피처 정규화, 거리 행렬 등 실무 패턴에 브로드캐스팅을 적용할 수 있다

