브로드캐스팅
Broadcasting은 두 배열 간의 연산 과정을 수행할 때 배열 간 Shape가 다를 경우 두 배열 간의 형상을 맞추는 작업을 말한다.
아래와 같은 두 넘파이 배열이 있다고 가정하자.
# 데모 배열 생성
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가 다를 경우 두 배열 간의 형상을 맞추는 작업을 말한다."
'ETC' 카테고리의 다른 글
[DB] 트랜잭션(transaction)이란? (0) | 2022.06.17 |
---|---|
[OS] (동기/비동기) 와 (블럭/논블록의) 차이 (0) | 2022.04.11 |
[python] 클래스 변수와 __dict__ (0) | 2021.12.14 |
[python] 클래스의 특별한 메서드 (0) | 2021.12.12 |
[python] List보다 Numpy 가 빠른 이유 (0) | 2021.11.21 |
모의 객체(Mock Object) 란? (0) | 2021.11.19 |
댓글