본문 바로가기
ETC

[python] Broadcasting(브로드캐스팅)

by 안주형 2021. 12. 14.

브로드캐스팅

Broadcasting은 두 배열 간의 연산 과정을 수행할 때 배열 간 Shape가 다를 경우 두 배열 간의 형상을 맞추는 작업을 말한다.

두 배열 간의 형상을 맞추는 Broadcasting 과정 -https://mathematica.stackexchange.com/questions/99171/how-to-implement-the-general-array-broadcasting-method-from-numpy

 

아래와 같은 두 넘파이 배열이 있다고 가정하자.

# 데모 배열 생성
a = np.arange(1, 25).reshape(4, 6)
b = np.arange(25, 49).reshape(4, 6)

print(a)
[[ 1  2  3  4  5  6]
 [ 7  8  9 10 11 12]
 [13 14 15 16 17 18]
 [19 20 21 22 23 24]]
print(b)
[[25 26 27 28 29 30]
 [31 32 33 34 35 36]
 [37 38 39 40 41 42]
 [43 44 45 46 47 48]]

 

Shape이 같은 배열의 이항 연산일 경우 위치가 같은 요소 단위로 수행되어 다음과 같은 결과가 나온다.(Broadcasting이 일어나지 않는다.) 

print(a+b)
[[26 28 30 32 34 36]
 [38 40 42 44 46 48]
 [50 52 54 56 58 60]
 [62 64 66 68 70 72]]

 

그러나 Shape이 다른 두 배열 사이의 이항 연산 사이에서는 두 배열을 같은 Shape로 만들어주는 Broadcasting 과정을 거친 후 연산을 수행한다.

아래와 같이 배열의 Shape가 다른 배열의 연산을 수행하면 아래와 같은 결과가 나온다.

# 데모 배열 생성
a = np.arange(5).reshape((1, 5))
b = np.arange(5).reshape((5, 1))

print(a)
[[0 1 2 3 4]]
print(b)
[[0]
 [1]
 [2]
 [3]
 [4]]
 
 print(a+b)
[[0 1 2 3 4]
 [1 2 3 4 5]
 [2 3 4 5 6]
 [3 4 5 6 7]
 [4 5 6 7 8]]

 

이는 a와 b의 배열의 Broadcasting을 통해 아래와 같이 서로 같은 Shape로 바뀐 후 연산을 수행하게 되기 때문이다.

a=[[0 1 2 3 4],
 [0 1 2 3 4],
 [0 1 2 3 4],
 [0 1 2 3 4],
 [0 1 2 3 4]]
 
 b =[[0 0 0 0 0],
 [1 1 1 1 1],
 [2 2 2 2 2],
 [3 3 3 3 3],
 [4 4 4 4 4]]

 

다시 정리하면 Broadcasting은 "두 배열 간의 연산 과정을 수행할 때 배열 간 Shape가 다를 경우 두 배열 간의 형상을 맞추는 작업을 말한다."

댓글