반응형
Numpy의 브로드캐스팅 전에
행렬의 곱을 알아야한다.
기존에 배웠던 행렬의 곱은 이러한 원칙이 지켜져야만 한다.
Numpy의 브로드캐스팅은
이러한 원리와 비슷하다.
곱이 아닌 합으로 본다면
이렇게 볼 수 있다.
[브로드캐스팅 규칙]
[Rule]
2차원과 1차원의 연산
1. 이어지는 각 차원에 대해 축의 길이가 일치
2. 둘 중 하나의 길이가 1
1번 혹은 2번의 경우에는 두 배열은 브로드캐스팅 호환이다.
브로드캐스팅은 누락된 혹은 길이가 1인 차원에 대해 수행된다.
https://numpy.org/doc/stable/user/theory.broadcasting.html#array-broadcasting-in-numpy
브로드캐스팅 내용 및 이미지 출처.
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번 축에 대해 브로드캐스팅이 다소 더 까다롭다.
반응형
'Numpy' 카테고리의 다른 글
Numpy - 배열 순서 섞기 : np.random.shuffle, np.random.permutation (0) | 2020.08.08 |
---|---|
Numpy - 정렬 : sort, np.sort, 축, 내림차순 (0) | 2020.07.10 |
Numpy - searchsorted (0) | 2020.07.04 |
Numpy - 3차원 axis 이해하기 (12) | 2020.06.24 |
Numpy - 2차원 axis 이해하기 (1) | 2020.06.23 |