본문 바로가기

AI/programming

[numpy] Broadcasting

 

실제 선형대수 계산에서는 벡터나 행렬의 크기가 다르면 연산이 불가하다

 

하지만 numpy에서는 특정 조건을 만족한다면 크기가 달라도 연산이 가능해진다

 

특정 조건은

1. 열과 행 중 하나(축들 중 하나)가 1이면 가능 (하나의 축을 확장시킬 수 있음)

2. 차원의 짝이 맞아야 가능

 

예시를 보면 이해가 빠르다

 

http://www.astroml.org/book_figures/appendix/fig_broadcast_visual.html

첫 번째 예시는 1번을 만족한다. 이 때 사진처럼 확장되어 계산되는 것과 동일함

 

두 번째 예시도 1번을 만족한다 (1x3)

 

세 번째 예시는 1번을 만족하고 두 배열에서 모두 확장이 이루어졌다.

 

import numpy as np

a = np.array([0,1,2])
b = np.array([5])

print(a+b) # [5,6,7]

a2 = np.array([[1,1,1],[1,1,1],[1,1,1]])
b2 = np.array([0,1,2])

print(a2 + b2) # [[1,2,3],[1,2,3],[1,2,3]]

a3 = np.array([0,1,2])
b3 = np.array([[0],[1],[2]])

print(a3 + b3) # [[0,1,2],[1,2,3],[2,3,4]]

 

 

 

불가능, 가능 예시를 살펴보자면

 

2x2 배열과 2x3 배열의 경우 가능한가? -> 가능하지 않음 각 배열의 끝자리가 2와 3으로 짝이 맞지 않음

 

2x3 과 3x3의 경우 가능한가? -> 가능하지 않음 끝자리는 같지만 다음 자리가 2와 3으로 짝이 맞지 않음

 

1x3과 3x3의 경우 가능? -> 가능하다 끝자리의 짝이 맞고 1이기 때문에 확장이 가능하다

 

 

이렇게 모양이 달라도 특정 조건에 만족된다면 "브로드캐스팅"을 통해 연산이 가능해진다.

'AI > programming' 카테고리의 다른 글

[numpy] numpy array와 list의 차이  (0) 2024.06.07