<플레이데이터>부트캠프의 기록/Python
Python_12 : Numpy) reshape에서 -1의 의미 (파이썬)
EZ_SOO
2022. 7. 19. 20:46
오늘부터 드디어 파이썬 기초가 끝나고 Numpy를 배우기 시작했다. 그런데 도중에 reshape를 하며 행열을 원하는대로
바꾸는 것을 했는데 자꾸 -1이 나와서 수업시간에는 이해를 못하다가, 복습을 하며 이해를 하게됐다.
내것으로 만들기 위해, reshape에서의 -1의미를 정리해본다.
reshape
- numpy에서 배열의 차원을 원하는대로 바꿀때 사용한다.
- 변수.reshape((원하는 행, 원하는 열)) 로 나타낼 수 있다.
import numpy as np
In: a = np.array([[10, 20, 30], [40, 50, 60]])
print(a)
Out: array([[10, 20, 30],
[40, 50, 60]])
우선 지금 정의된 변수 a의 행열의 모습을 보면 (2, 3)의 모습인것을 알 수 있다.
reshape를 통해 (3, 2)로 바꿔보도록 하겠다.
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((3,2))
out: array([[10, 20],
[30, 40],
[50, 60]])
이렇게 reshape는 내가 정의했던 것을 원하는 행열의 모습으로 변활시킬 수 있다. 이해를 돕기위해 몇가지 더 예를들면
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((1,6))
out: array([[10, 20, 30, 40, 50, 60]])
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((6,1))
out: array([[10],
[20],
[30],
[40],
[50],
[60]])
이런 모습으로 보일 수 있다. 그런데 reshape에서 등장하는 -1의 의미는 무엇일까?
reshape에서 -1의 의미
- 남은 배열의 길이와 남은 차원으로부터 추정해서 알아서 지정하라는 의미
- reshape중 행에 -1을 지정했을때의 예) 변수명.reshape(-1,n)
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((-1,1)) # a.shape(6,1)과 동일
out: array([[10],
[20],
[30],
[40],
[50],
[60]])
-------------------------------------------------------
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((-1,2)) # a.shape(3,2)과 동일
out: array([[10, 20],
[30, 40],
[50, 60]])
--------------------------------------------------------
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((-1,3)) # a.shape(2,3)과 동일
out: array([[10, 20, 30],
[40, 50, 60]])
->열을 지정해준만큼 행이 자동으로 값에 맞춰 변형되는 것을 볼 수 있다.
- reshape중 열에 -1을 지정했을때의 예) 변수명.reshape(n,-1)
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((1,-1)) # a.shape(1,6)과 동일
out: array([[10, 20, 30, 40, 50, 60]])
-------------------------------------------------------
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((2,-1)) # a.shape(2,3)과 동일
out: array([[10, 20, 30],
[40, 50, 60]])
--------------------------------------------------------
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((3,-1)) # a.shape(3,2)과 동일
out: array([[10, 20],
[30, 40],
[50, 60]])
--------------------------------------------------------
in: a = np.array([[10, 20, 30], [40, 50, 60]])
a.reshape((6,-1)) # a.shape(6,1)과 동일
out: array([[10],
[20],
[30],
[40],
[50],
[60]])
->행을 지정해준만큼 열이 자동으로 값에 맞춰 변형되는 것을 볼 수 있다.
reshape에서의 오류
- 행과 열이 가능한 값으로 바꿔야지 안에 있는 값보다 더 크게 바꾸면 에러가 발생한다.
-> a안에 값이 6개인데 (1,4)의 구조는 4개밖에 담아낼 수 없으므로 에러가 발생한다.
-> a안에 값이 6개인데 (3,6)의 구조는 18개의 값을 담아내야하기 때문에 에러가 발생한다.