반응형
파이썬 넘파이 배열 차원 변경 함수 : np.reshape
reshape 함수를 통하여 넘파이 배열의 차원을 변환하는 방법에 대해서 살펴보고,
함수 내 input으로 -1을 포함한 경우의 의미도 살펴보도록 하겠습니다.
np.reshape 함수 기본 사용법
기본적인 사용 방법은 배열 a에 대하여
a.reshape(변환 shape) 혹은 np.reshape(a, 변환 shape)
형태로 사용해주시면 됩니다.
axis 순서대로(가로 -> 세로 축 방향) 값들을
변환되는 shape으로 재배정하는 원리이며,
재배정이 불가능한 shape인 경우 ValueError가 발생합니다.
1차원 배열에 대한 실행 예제입니다.
import numpy as np
a = np.arange(9)
# array([0, 1, 2, 3, 4, 5, 6, 7, 8])
a.reshape(3, 3) # np.reshape(a, (3, 3))으로도 사용 가능
'''array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])'''
a.reshape(2, 5)
# ValueError: cannot reshape array of size 9 into shape (2,5)
# 2 * 5가 9가 아니라서 발생
9개의 요소를 가진 1차원 배열을 3 * 3 배열로 변경이 가능합니다.
다만, (2, 5)의 shape으로는 9개의 요소를 표현할 수 없어 에러가 발생합니다.
reshape 함수 -1의 의미
특정 차원의 숫자로 -1을 넣는 경우도 자주 등장합니다.
-1을 넣은 자리에는 가능한 shape을 자동 계산하여 반영해주는 방식으로,
예를 들어, 8개의 사이즈에서 reshape(2, -1)로 넣으면,
(2, 4)로 자동 변환되는 방식입니다.
단, 2개 이상의 axis 자리에 -1이 포함되는 것은 불가능합니다.
2차원 배열을 통한 예제를 살펴보도록 하겠습니다.
b = np.array([[1, 2, 3, 4],
[5, 6, 7, 8]])
b.reshape(2, 2, 2) # b.reshape(2, 2, -1)와 동일
'''array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])'''
b.reshape(-1, 2) # b.reshape(4, 2)와 동일
'''array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])'''
b.reshape(-1) # b.reshape(8)와 동일
# array([1, 2, 3, 4, 5, 6, 7, 8])
b.reshape(3, -1)
# ValueError: cannot reshape array of size 8 into shape (3,newaxis)
# 3 * n = 8을 만족하는 n이 정수가 아니라서 오류
reshape(-1)으로 지정하면, 모든 원소를 1차원 배열로 편 array를 반환하게 되며,
(3, -1) 같은 경우는 8이 3의 배수가 아니기에,
변환 가능한 차원이 없어 ValueError가 발생하게 됩니다.
'Python > Numpy' 카테고리의 다른 글
[Numpy] np.squeeze 함수 사용법과 의미 (0) | 2022.01.14 |
---|---|
[Numpy] 배열을 반복하여 쌓는 함수 np.tile 사용법(그림으로 정리) (0) | 2022.01.13 |
[Numpy] 넘파이 어레이(배열) 인덱싱, 슬라이싱 총정리 (0) | 2022.01.10 |