본문 바로가기
Data Science

[Numpy] 넘파이 reshape 차원 추가 축소 변경하기

by Lora Baek 2022. 8. 3.
300x250

ndarray를 다루다 보면 특정 차원으로 바꾸거나 크기를 변환해야 할 때가 있다. 넘파이 reshape는 그럴 때 유용하게 사용할 수 있는 일종의 method이다.

ndarray.reshape(행,열) 형태로 크기를 지정해줄 수 있기 때문에 같은 데이터의 차원을 추가하거나 축소할 수 있다.

 

넘파이 reshape를 사용할 때 주의할 점이 있는데, 바로 전체 데이터가 10개인 경우 5x2 행렬이나 2x5 행렬과 같이 만들어야 한다는 점이다. 3x3처럼 불가능한 형태로 지정을 하면 아래와 같은 오류 메시지를 만나게 된다.

ValueError : cannot reshape array of size 10 in shape(3,3)

 

1부터 20 사이, 10개의 홀수로 이루어진 배열을 생성해보았다.

1차원으로 생성된 이 데이터를 2차원으로, 2차원 데이터를 다시 다른 형태로 바꿀 수 있다.

 

넘파이 reshape -1

그런데 실전에서는 -1을 인자로 사용하는 경우를 많이 보게 될 것이다. 

결론적으로 말하면 -1은 자동으로 오류가 나지 않게 설정해서 행렬을 만들어 달라는 명령이다.

12개의 숫자로 구성된 ndarray를 하나 생성해보자.

 

 

array_12라는 12개의 데이터를 가진 배열을 생성했다.

그다음, 2차원 배열로 변환을 하되 행(ROW) 수는 2로 지정을 하고, 열(COLUMN) 수는 알아서 맞춰달라는 의미로 -1을 입력해주었다. 아래와 같이 2 x ? = 12 즉 열 수를 6으로 지정한 array_12_new라는 2차원 배열이 자동적으로 생성되었다.

 

넘파이 차원 추가 축소

 

이제 array_12를 3차원 배열로 변환, 즉 차원을 추가해보겠다. 전체 크기가 맞아야 하므로 ? x 2 x 3 = 12 즉 행 수를 2로 맞추어서 3차원 배열을 생성하게 된다.

 

물론 이렇게 -1을 사용할 경우에도 12개의 데이터를 reshape하는데 7개의 행을 가지도록 만들 수는 없다. 마찬가지로 오류가 발생하게 된다.

 

가장 많이 사용되는 형태는 reshape(-1,1)이다.

원본이 어떤 형태라도 2차원이고, 반드시 1개의 칼럼을 가진 ndarray로 변환하는 것인데,

이렇게 생성된 여러 개의 ndarray는 각 형태를 통일해서 concat이라던지 stack으로 결합할 수 있다.

3차원에서 2차원으로 만드는 것(차원 축소), 1차원에서 2차원으로 만드는 것(차원 추가) 모두 가능하다.

 

만약 데이터를 확인할 때 세로 한 줄로 쭉 나오는 게 보기 싫다면 아래와 같이 tolist()를 이용해 리스트로 변환해서 print 하여 좀 더 직관적으로 데이터를 볼 수도 있다.

 

참고로 3차원 데이터를 tolist()를 이용해 리스트 타입으로 출력해보면 이렇게 나온다.

💡 만약 reshape(-1) 과 같이 입력한다면 어떨까? 1차원으로 알아서 만들어줘-라는 명령이므로, 데이터 전체 갯수를 가진 1차원 배열이 생성된다. 즉, 차원 없애기와 같이 활용할 수 있는 것이다.

 

 

차근차근 넘파이 개념 정리하기

 

2022.08.02 - [Data Science] - [Numpy] 넘파이 배열 생성 arange range 차이+파이썬 빈 배열 만들기

2022.08.02 - [Data Science] - [Numpy] 넘파이 설치+차원 확인+데이터 타입 확인 및 변경

댓글