브로드 캐스팅은
파이썬 코드 실행 시간을 줄일 수 있는 또다른 기법에 해당된다.
파이썬의 브로드 캐스팅의 작동 방법에 대해 알아보고자 한다.
예시 1)
아래 이미지 내에서 행렬은 네 가지 다른 음식 100g 당 탄수화물, 단백질, 지방이 가지는 칼로리를 보여준다.
이에 목적은 각 네 가지 음식의 각 영양소가 주는 칼로리의 백분율을 구하는 것이라고 한다.

(1) 각 열을 더하면, 각 음식의 총 칼로리를 알 수 있다.
axis=0 라는 매개변수는 파이썬에서 세로로 더하라는 뜻이다. 가로축은 axis=1
(2) A/cal.reshape(1,4) 부분은 브로드 캐스팅의 한 예에 해당된다.
(3,4) 행렬인 A를 (1,4) 행렬로 나누는 것이다.
물론, cal 코드를 실행한 이후에는 변수 cal은 이미 (1,4) 행렬이 된다.
그래서 reshape 함수를 사용할 필요가 없다.
만일 파이썬 코드를 쓸 때 행렬의 차원이 확실하지 않다면,
reshape 함수를 사용해서 필요한 차원의 행렬을 확실하게 만들어 줄 수 있다.
cal = A.sum(axis = 0)
#percentage = 100*A/cal.reshape(1,4)
percentage = 100*A/cal #백분율 계산
예시 2)
(4,1) 벡터에 상수를 더한다면, 파이썬은 이 수를 자동으로 (4,1) 벡터로 만든다.
그리고 두 벡터를 더한다. 이 브로드 캐스팅은 행 벡터와 열 벡터 모두에게 작동한다.

예시 3)
(m,n)행렬에 (1,n) 행렬을 더하는 경우
: 파이썬은 (1,n)행렬을 m번 복사해서 (m,n)행렬로 만들어 준다.
아래의 예시에서는 (1,3)행렬을 두 번 복사해서 (2,3)행렬로 만든다.
이후 두 행렬을 더한다. 첫 열에는 100, 그 다음은 200, 300을 붙인다.
(덧셈 대신 나눗셈을 한 것 뿐이다.)

예시4)
(m,n) 행렬과 (m,1) 벡터 혹은 행렬을 더한다면,
이 행렬을 n번 가로로 복사해서 (m,n) 행렬로 만들어 준다.
아래의 예시로는 가로로 세 번 복사해서 더한다고 생각할 수 있다.
첫 행은 100을 더하고, 둘째 행은 200을 더한다.

브로드 캐스팅의 일반적인 원리
(m,n) 행렬에 (1,n) 행렬을 더하거나 빼거나, 곱하거나 나눈다면
이 행렬을 m번 복사해서 (m,n) 행렬로 만든 뒤, 요소별 연산을 해준다.

(m,1) 행렬 혹은 열 벡터가 있을 때,
실수와 덧셈, 뺄셈, 곱셈 혹은 나눗셈을 한다면 (1,1) 행렬이라고도 할 수 있다.
위의 경우에는 이 실수를 m번 복사하여 (m,1) 행렬을 만들어 주고, 요소별 덧셈을 해준다.
행 벡터에서도 비슷하게 작동한다.

* 아래의 영상을 참고하여 정리한 내용입니다.
https://www.youtube.com/watch?v=tKcLaGdvabM&list=PLkDaE6sCZn6Ec-XTbcX1uRg2_u4xOEky0&index=21
'Study > Deep Learning' 카테고리의 다른 글
| A Note on Python/Numpy Vectors (0) | 2024.03.26 |
|---|---|
| Vectorizing Logistic Regression's Gradient Computation (0) | 2024.03.26 |
| Vectorizing Logistic Regression (0) | 2024.03.25 |
| More Vectorization Examples (0) | 2024.03.25 |
| Vectorization (0) | 2024.03.25 |