본문 바로가기
Study/Deep Learning

Broadcasting in Python

by 강렬한 스포트라이트 2024. 3. 26.

 

 

브로드 캐스팅

파이썬 코드 실행 시간을 줄일 수 있는 또다른 기법에 해당된다.

 

파이썬의 브로드 캐스팅의 작동 방법에 대해 알아보고자 한다.

 

예시 1)

아래 이미지 내에서 행렬은 네 가지 다른 음식 100g 당 탄수화물, 단백질, 지방이 가지는 칼로리를 보여준다.

이에 목적은 각 네 가지 음식의 각 영양소가 주는 칼로리의 백분율을 구하는 것이라고 한다.

위의 행렬을 A 변수로 지정해서 아래와 같이 코드 진행함.

 

(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

 

반응형
SMALL

'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