본문 바로가기

CS/AI | CV

파이썬 브로드캐스팅 | Broadcasting in Python

@파이썬 브로드캐스팅(Broadcasting in Python)

-파이썬 코드 실행 시간을 줄일 수 있는 또 다른 기법

 

 

네 가지 다른 음식 100g당 탄, 지, 단이 가지는 칼로리 

 

 

@목적

'네 가지 음식의 탄수화물, 지방, 단백질이 주는 칼로리의 백분율 구하기'

->행렬의 네 열 안의 수의 합 구하고 행렬 전체를 나눠 네 가지 음식 안의 탄, 지, 단이 주는 칼로리의 백분율 구하기

 

 

 

without using for loop!

 

 

 

A라고 부를 (3,4) 행렬을 가지고 한 줄의 파이썬 코드만으로 각 열의 합을 구할 것

두번째 줄에서는 각 네 열을 각 열의 합으로 나눌 것

 

 

실습)

import numpy as np

# data
A = np.array([[56.0, 0.0, 4.4, 68.0],
              [1.2, 104.0, 52.0, 8.0],
              [1.8, 135.0, 99.0, 0.9]])

print(A)
print()

# add the sum of each column
cal = A.sum(axis=0)  # add vertically
print(cal)
print()

# compute the percentage
# An example of broadcasting(reshape())
percentage = 100 * A / cal.reshape(1, 4)  # It's a percentage, you have to multiply by 100
print(percentage)

 

 

 

@어떻게 (3,4) 행렬을 (1,4) 행렬 혹은 벡터로 나눌 수 있을까?

 

(4,1) 벡터에 상수를 더한다면 파이썬은 이 수를 자동으로 (4,1) 벡터로 만들어줌

저 두 벡터를 더하면 오른쪽에 있는 벡터가 됨

(모든 요소에 100을 더한 것)

 

 

이 브로드캐스팅은 행 벡터와 열 벡터 모두에게 작동

 

 

 

예)

(2,3) 행렬에 (1,n) 행렬 더하는 연산

 

 

파이썬은 이 행렬을 m번 복사해 (m,n) 행렬로 만들어줌

 

여기서는 (1,3) 행렬을 두 번 복사해 (2,3) 행렬로 만들어줌

 

 

저 두 벡터를 더하면 오른쪽에 있는 벡터가 됨

(첫번째 열에는 100을, 두번째 열에는 200을, 세번째 열에는 300을 붙인 것)

 

 

 

예)

(m,n) 행렬과 (m,1) 벡터 혹은 행렬 더하는 연산

이 행렬을 n번 가로로 복사해 (m,n) 행렬로 만들어줌

 

 

 

@파이썬 브로드캐스팅의 일반적인 원리

(m,n) 행렬에 (1,n) 행렬을 사칙연산한다면 이 행렬을 m번 복사해 (m,n) 행렬로 만든 뒤 요소별 연산 수행

(m,n) 행렬에 (m,1) 행렬을 사칙연산한다면 이 행렬을 n번 복사해 (m,n) 행렬로 만든 뒤 요소별 연산 수행

 

 

 

 

참고)

Numpy broadcasting

누르면 이동

 

 

 


Tiny Star