reshape(-1, 2) 혹은 reshape(3, -1) 처럼 reshape() 메소드 안에 '-1'이 들어가 있는 경우가 있습니다. 이때 reshape()의 '-1'이 의미하는 바는, 변경된 배열의 '-1' 위치의 차원은 "원래 배열의 길이와 남은 차원으로 부터 "추정"이 된다는 뜻입니다. (One shape dimension can be -1. In this case, the value is inferred from the length of the array and remaining dimensions.)
import numpy as np
x = np.arange(12).reshape(3, 4)
x.shape
(3, 4)
x.reshape(-1)은 x.reshape(1, -1)과 같이 1차원 배열을 반환합니다.
"axis = 0 이 가장 바깥차원 방향 axis = 1이 그 다음 차원방향이다."
axis를 통해 연산을 하면 한차원이 다운그레이드되면서 shape의 모양이 바뀌게 됩니다.
연산을 수행하기 위해서 넘파이는 계산하게될 두 데이터값의 shape을 맞춰주는 작업을 합니다. b의 shape (1,3)으로 A shape과 다르므로 (3,3)으로 변경시켜 줍니다. 변경 시켜줄 때 기존에 있는 값을 복사하면서 같은 shape으로 만들어 줍니다.
2차원이든 3차원이든 상관없이 우리는 1을 주목하고 그값을 변경하면 모든게 해결되었습니다. 하지만 오늘 배운 내용은 A, B 둘의 shape은 달랐지만 차원은 같았습니다.
차원이 다를 경우의 broadcasting
차원이 작은 쪽의 shape이 우측정렬한다고 했을 때 완전히 포개어지는가로 확인해 볼 수 있습니다.
원론적으로 말하자면 (4,3,4)는 (3,4)로 이루어진 행렬이다.
(4,3,4)는 (3,4)의 행렬이 4개 있다는 말이다.
keepdims를 적용하자 차원이 죽으면서 사라졌던 부분이 숫자 1로 바뀌면서 shape과 관계 없이 브로드캐스팅이 가능한 상태가 되었네요!