@파이썬 브로드캐스팅(Broadcasting in Python)
-파이썬 코드 실행 시간을 줄일 수 있는 또 다른 기법
@목적
'네 가지 음식의 탄수화물, 지방, 단백질이 주는 칼로리의 백분율 구하기'
->행렬의 네 열 안의 수의 합 구하고 행렬 전체를 나눠 네 가지 음식 안의 탄, 지, 단이 주는 칼로리의 백분율 구하기
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
'CS > AI | CV' 카테고리의 다른 글
신경망 네트워크 구성 | Neural Network Representations (0) | 2021.01.06 |
---|---|
파이썬 넘파이 벡터 | A Note on Python/Numpy Vectors (0) | 2021.01.06 |
로지스틱 회귀의 경사 계산 벡터화 | Vectorizing Logistic Regression's Gradient Computation (0) | 2021.01.05 |
로지스틱 회귀의 벡터화 | Vectorizing Logistic Regression (0) | 2021.01.05 |
벡터화 예제 | Vectorization Examples (0) | 2021.01.03 |