NumPy 브로드캐스팅

NumPy 브로드캐스팅

브로드캐스팅(broadcasting)은 모양이 다른 배열끼리 연산할 때, NumPy가 모양을 자동으로 맞춰 요소별 연산을 수행하게 해 주는 규칙이에요. 명시적인 복사 없이 메모리를 아끼면서 벡터화 연산을 가능하게 해 줘요.

출처: https://numpy.org/doc/stable/user/basics.broadcasting.html

스칼라와 배열

배열에 스칼라(숫자)를 더하면 스칼라가 배열 전체로 확장돼요. 가장 단순한 브로드캐스팅 예시예요.

import numpy as np

a = np.array([1, 2, 3])
b = a + 10      # [11 12 13]

서로 다른 모양의 배열

예를 들어 2행 3열 배열과 1차원 배열(3개)을 더하면, 행 방향으로 확장되어 연산돼요.

x = np.array([[1, 2, 3],
              [4, 5, 6]])
y = np.array([10, 20, 30])

result = x + y
# [[11 22 33]
#  [14 25 36]]

열 방향으로 확장하려면 (3,1) 모양으로 만들어 주면 돼요.

브로드캐스팅 규칙

브로드캐스팅은 두 배열의 차원을 오른쪽에서 왼쪽으로 맞춰 비교해요. 각 차원에서 두 크기가 같거나, 둘 중 하나가 1이면 연산 가능해요. 조건을 만족하지 못하면 ValueError가 나요.

예를 들어 (3,1)(1,4)를 곱하면 (3,4)가 돼요.

col = np.array([[1], [2], [3]])    # (3,1)
row = np.array([10, 20, 30, 40])   # (1,4)
print(col * row)                   # (3,4)

더 알아보기