본문 바로가기

Numpy

Numpy - 브로드캐스팅

반응형

Numpy의 브로드캐스팅 전에

 

행렬의 곱을 알아야한다.

 

 

 

기존에 배웠던 행렬의 곱은 이러한 원칙이 지켜져야만 한다.

 

 

 

 

Numpy의 브로드캐스팅은 

 

 

이러한 원리와 비슷하다.

 

 

 

 

 

 

곱이 아닌 합으로 본다면

 

이렇게 볼 수 있다.

 

 

 

 

 

 

[브로드캐스팅 규칙]

 

[Rule]


2차원과 1차원의 연산

1. 이어지는 각 차원에 대해 축의 길이가 일치

2. 둘 중 하나의 길이가 1


1번 혹은 2번의 경우에는 두 배열은 브로드캐스팅 호환이다.


브로드캐스팅은 누락된 혹은 길이가 1인 차원에 대해 수행된다.

 

 

 

https://numpy.org/doc/stable/user/theory.broadcasting.html#array-broadcasting-in-numpy

 

Array Broadcasting in Numpy — NumPy v1.18 Manual

Array Broadcasting in Numpy Let’s explore a more advanced concept in numpy called broadcasting. The term broadcasting describes how numpy treats arrays with different shapes during arithmetic operations. Subject to certain constraints, the smaller array

numpy.org

브로드캐스팅 내용 및 이미지 출처.

 

 

 

 

 

1. 1차원 배열로 0번 축에 대해 브로드캐스팅

 

 

(4 x 3) + (3,) = (4 x 3)

 

1번째 룰인 

 

축의 길이가 일치하므로 브로드캐스팅 가능하다.

 

 

브로드캐스팅 결과

 

 

 

 

 

 

 

 

 

 

1-1. 2차원 배열로 0번 축에 대해 브로드캐스팅

 

 

사실 위의 결과와 동일하지만 벡터가 아닌 행렬간 합으로 보고자 한다.

 

 

(4 x 3)  +  (1 x 3) = (4 x 3)

 

축의 길이가 일치하며 둘 중 하나의 길이가 1이므로

 

브로드캐스팅 가능하다.

 

 

 

 

 

 

 

 

3. 2차원 배열의 1번 축에 대한 브로드캐스팅

 

 

 

축의 길이가 4로 같은데 왜 에러가 날까?

 

 

 

 

 

브로드캐스팅 규칙을 따르자면

 

0번 축이 아닌 다른 축에 대해

낮은 차원의 배열로 연산 수행 시

브로드캐스트 차원은, 작은 배열에서는 반드시 1이어야 한다.

 

 

 

그림으로 보자면

 

 

 

 

이렇게 미스매치가 일어나면 브로드캐스팅이 안된다는 것이다.

 

 

 

 

해결 방법은 1차원이 아닌 2차원으로 4행 1열로 만들어야한다.

(4,) → (4, 1)

 

 

 

 

 

 

 

표로 그려보면 다음과 같다.

 

 

 

 

 

0번 축에 비해 1번 축에 대해 브로드캐스팅이 다소 더 까다롭다.

 

 

반응형