[Python] reshape(-1,1)에서 -1의 의미?
배열의 차원을 변경시키는 reshape()함수, 여기서 -1의 의미는 무엇을 의미할까요?
arange()를 이용해서 1차원 배열 만들기
reshape은 배열의 차원을 변경할 때 이용하는 것으로 알고 있을 텐데요, numpy의 arange함수를 이용해 0에서 11까지 12개의 원소를 가진 1차원 배열을 만들어 몇 가지 예로 확인해보겠습니다.
#출력 결과
x= [ 0 1 2 3 4 5 6 7 8 9 10 11]
reshape()함수로 2차원 배열로 형태 변경하기
reshape(정수,정수)는 reshape(정수 행, 정수 열)의 2차원 배열로 값을 변형 해줍니다. 다음의 결과가 어떻게 되는지 확인해볼까요?
#print(x.reshape(1,12)) = 1행 12열
[[ 0 1 2 3 4 5 6 7 8 9 10 11]]#print(x.reshape(2,6)) = 2행 6열
[[ 0 1 2 3 4 5]
[ 6 7 8 9 10 11]]#print(x.reshape(3,4)) = 3행 4열
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]#print(x.reshape(4,3)) = 4행 3열
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]#print(x.reshape(6,2)) = 6행 2열
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]#print(x.reshape(12,1)) = 12행 1열
[[ 0]
[ 1]
[ 2]
[ 3]
[ 4]
[ 5]
[ 6]
[ 7]
[ 8]
[ 9]
[10]
[11]]
reshape(-1,1)에서 -1의 의미는?
그렇다면 reshape(-1,1)은 우선 2차원 배열로 변경하라는 것을 의미한다는 것을 알 수 있는데요, 열의 자리에 1은 1열로 만들라는 것인데, 행의 자리의 -1은 어떤 의미일까요?
이는 열의 값은 특정 정수로 지정이 되어있을 때, 남은 배열의 길이와 남은 차원으로부터 추정해서 알아서 지정하라는 의미입니다.
3가지 정도로 확인 해보겠습니다.
#x.reshape(-1,1)
array([[ 0],
[ 1],
[ 2],
[ 3],
[ 4],
[ 5],
[ 6],
[ 7],
[ 8],
[ 9],
[10],
[11]])#x.reshape(-1,2)
array([[ 0, 1],
[ 2, 3],
[ 4, 5],
[ 6, 7],
[ 8, 9],
[10, 11]])#x.reshape(-1,3)
array([[ 0, 1, 2],
[ 3, 4, 5],
[ 6, 7, 8],
[ 9, 10, 11]])
x.reshape(-1,1)을 보았을 때, 열이 1로 정해졌으니 12개의 행이 만들어 짐을 확인 할 수 있고,
x.reshape(-1,2)을 보았을 때, 열이 2로 정해졌으니 6개의 행이 만들어 짐을 확인 할 수 있고,
x.reshape(-1,3)을 보았을 때, 열이 3으로 정해졌으니 4개의 행이 만들어졌음을 확인 할 수 있네요. : )
즉, 각의 reshape 결과는 다음과 같습니다.
x.reshape(-1,1)=x.reshape(12,1)
x.reshape(-1,2)=x.reshape(6,2)
x.reshape(-1,3)=x.reshape(4,3)
남은 배열의 길이와 남은 차원으로부터 추정해서 알아서 행을 지정해주다니 편리하네요.