Python/Numpy

[Python] 파이썬 Numpy - reshape

나비🦋 2024. 2. 26. 12:05
반응형

안녕하세요! 나비입니다 🦋

지난 포스팅에서는 파이썬 Numpy에서 행렬의 형태와 차원을 확인할 수 있는 메소드를 알아봤는데요,

이에 이어서 이번 포스팅에서는 reshape이라는 메소드를 다뤄보려 합니다.



Numpy의 “reshape” 함수란?


reshape은 말 그대로 ‘다시 모양을 만들다’, ‘모양을 바꾸다’라는 의미로, 행렬의 모양(차원)을 바꿔주는 함수예요.

예를 들어, 원소 12개짜리 행벡터(row vector)가 있다고 가정해볼게요. 이 벡터를 3 x 4 행렬로 바꾸고 싶다면? 6 x 2 행렬로 바꾸고 싶다면? 아니면 열벡터로 바꾸고 싶다면?

이때 reshape을 사용할 수 있습니다!

reshape 함수 안에 들어가는 인수는 두 가지예요. 행의 개수, 그리고 열의 개수가 각각 입력되어야 합니다.

이때, 원래 행렬(벡터)의 원소의 개수에 맞춰서 입력해야만 해요. 예를 들어, 원소 개수가 6개인 행렬을 reshape할 때 들어갈 수 있는 인수는 (1,6) (2,3) (3,2) (6,1)밖에 없어요. 다른 입력값이 들어가면, 원소의 개수가 어긋나기 때문에 에러가 뜹니다!

아래서 코드 예제를 보여드릴게요!




Numpy “reshape” 기본 예제 코드

import numpy as np
A = np.array([1,2,3,4,5,6])
print(A.reshape(2,3))
[[1,2,3],[4,5,6]]

위 코드에서, 바꾸기 전 행렬은 원소 6개의 행벡터입니다. 이 벡터를 2 x 3 행렬로 바꾸고 싶을 때, reshape 안에 인수 2와 3을 순서대로 넣어서 출력하면 원하는 결과를 얻을 수 있습니다.



B = np.array([[2,3,4],[5,6,7],[8,9,0]])
print(B.reshape(1,9))
[2,3,4,5,6,7,8,9,0]

마찬가지로, 3 x 3 행렬을 행벡터로 바꾸고 싶다면 인수 1와 9를 넣고 reshape 함수를 돌리면 됩니다.





reshape에서 숫자 -1의 의미


reshape 함수의 인수에는 행과 열의 개수가 들어가기 때문에, 기본적으로 양의 정수만 들어갈 수 있습니다.

하지만, 바꾸기 전 원래 행렬의 차원을 모르는 경우에는 어떻게 해야 할까요?

결과적으로 열의 개수가 2인 행렬로 만들고 싶은데, 기존 행렬의 차원을 모른다면?

이런 상황에서는 행의 개수가 들어가야 할 자리에 숫자 -1을 넣어주면 됩니다. -1의 의미는 알아서 맞추라는 뜻이에요. 열의 개수를 2로 설정해 줬으니, 행렬의 크기를 고려해서 알아서 행의 개수를 찾아내라는 의미입니다.

간단한 예제를 보여드릴게요!

A = np.array([[11,22,33], [44,55,66], [77,88,99], [110,121,132]])
print(A.reshape(3,-1))
[[11,22,33,44],[55,66,77,88],[99,110,121,132]]




여기까지 reshape 함수의 의미, 예시, 그리고 숫자 -1의 사용까지 알아보았습니다. reshape은 shape과 마찬가지로 매우 자주 쓰는 함수이니, 확실하게 알아두시면 좋을 것 같습니다! 다음 포스팅에서는 numpy의 random 관련 함수에 대해서 이야기해 보도록 하겠습니다.

긴 글 읽어주셔서 감사드리며, 이 포스팅이 도움이 되셨다면 구독과 좋아요 부탁드립니다! ✨✨

반응형