브로드캐스팅 (Broadcasting)
shape이 같은 두 ndarray에 대한 연산은 각 원소별로 진행
연산이 가능한 두 ndarray가 만약 다른 shape을 갖는 경우 브로드캐스팅 (Shape 맞추기) 후 연산.
a와 b를 더할 때 서로 shape이 다르다.
이 때 broadcasting을 통해 자동으로 shape을 맞춘 후 연산을 진행함.
Broadcasting Rule
차원을 뒷차원부터 비교를 하며 shape이 같거나, 차원 중 값이 1인 것이 존재하면 가능함.
예를 들어, 위의 그림에서 b는 ((1), 3)의 모양을 하고 있으므로 브로드캐스팅이 가능함.
Shape이 같은 경우
그냥 각각 element끼리 더해준다.
Scalar(상수)와의 연산
각각의 element에 스칼라값이 모두 더해진다.
+ 뿐만아니라 모든 연산이 가능함.
위와 같이 % 연산을 하면 나머지를 반환하지만
이 때 0과 동일하냐는 조건을 달아주면 그에 따른 boolean list를 반환한다.
shape이 다른 경우
이 때 y가 각 행을 따라 복사되듯이 모두 더해지는 것을 확인할 수 있다.
이번에는 4크기의 1차원 배열을 만들어 더하기를 해본다.
할 수 없다고 에러가 뜬다.
이 때 x, y, z의 차원을 보면 아래와 같다.
앞서 rule에서 뒷차원부터 비교를 한다했으니..
x + y의 경우 각각의 뒷차원인 3과 3을 비교한다. --> 일치하니 연산진행.
x + z의 경우 각각의 뒷차원인 3과 4를 비교한다. --> 일치하지않으니 연산불가.
이번에는 1차원 배열이었던 y를 [1,3] 크기의 행렬로 바꿔본다.
그리고 다시 [4,3] 크기 행렬이었던 x와 덧셈을 진행한다.
둘 다 뒷차원이 3으로 더하기가 가능하다. :)
3차원 배열 브로드캐스팅
역시나 뒤에서부터 비교하며 4 -> 2 로 일치하니까 덧셈이 진행된다.
이 때 y는 제일 처음차원이 생략되어있으므로 1이라고 취급하기 때문에 연산이 가능하다.
1차원 배열과도 덧셈이 쉽게 가능하다~
위 내용은 fastcampus 강의 내용을 정리한 것입니다.
'AI > 데이터분석' 카테고리의 다른 글
[Numpy] linalg 서브모듈 선형대수 연산 (0) | 2020.01.22 |
---|---|
[Numpy] Boolean indexing (0) | 2020.01.20 |
[Numpy] axis(축) 이해 (0) | 2020.01.19 |
[Numpy] ndarray 기본 함수 (0) | 2020.01.19 |
[Numpy] ndarray 형태바꾸기 (reshape, flatten 등) (0) | 2020.01.19 |