
NumPy 배열 브로드캐스팅
브로드캐스팅
- 브로드캐스트(Broadcast)는 일반적으로 아는 라디오나 텔레비전 방송을 얘기하기도 하지만 '흩뿌리다, 널리 퍼뜨리다'라는 뜻도 가지고 있다
- 선형대수에서 행렬의 연산을 할 때 기본적으로 행렬의 크기(shape)가 동일해야 한다.
- 하지만 넘파이에서는 차원이나 크기가 다르더라도 일정한 조건을 충족하면 자동으로 확장하여 연산하게 되며 이를 브로드캐스팅이라고 한다
아래는 스칼라 브로드캐스팅 예제이다 (스칼라와 배열과의 연산은 브로드캐스팅을 통해 element-wise 연산을 수행한다)
import numpy as np
x = np.array([[1, 2],[3,4]]) # (2,2) 배열
print(x+5) # addition
print(x-3.) # subtraction
print(x*2) # product
print(x/2) # division
print(x//2) # floor division
print(x%2) # modulus
print(x**2) # power
print(np.sqrt(x)) # square root
- 브로드캐스팅을 수행함에 있어 준수해야 하는 특정한 규칙은 다음과 같다:
연산하는 배열들의 뒤에서부터 대응하는 축의 길이가 동일 혹은 1이어야만 한다 스칼라 브로드캐스팅은 스칼라 자체의 축의 길이가 1이여서 신경을 쓰지 않아도 되지만 그 외는 아니다 위 조건이 충족되지 않으면 배열의 모양이 호환되지 않기에 ValueError 가 발생한다 연산 결과로 반환되는 배열은 입력 배열들의 차원 중에 가장 큰 크기로 반환된다.
arr1 = np.random.randn(30).reshape(2,3,5)
arr2 = np.random.randn(10).reshape(2,1,5)
print(arr1+arr2) # (2,3,5) 배열
- 연산하는 배열들의 뒤에서부터 대응하는 축의 길이가 동일 혹은 1이어야만 한다 연산 결과로 반환되는 배열은 입력 배열들의 차원 중에 가장 큰 크기로 반환된다.
arr1 = np.random.randn(30).reshape(2,3,5)
arr2 = np.random.randn(10).reshape(2,1,5)
arr3 = np.random.randn(15).reshape(1,3,5)
print(arr1+arr2+arr3)
print((arr1+arr2+arr3).shape)