In [1]: import numpy as np

In [2]: x = np.arange(12).reshape(3, 4)
In [3]: x.shape
Out[3]: (3, 4)

In [4]: x
Out[4]:
array([[ 0, 1, 2, 3],
        [ 4, 5, 6, 7],
        [ 8, 9, 10, 11]])

(1) reshape(-1, 정수) 의 행(row) 위치에 '-1'이 들어있을 경우


이제 reshape() 의 행(row) 차원 위치에 '-1'을 넣으면 어떻게 재구조화가 되는지 살펴보겠습니다.

총 12개의 원소가 들어있는 배열 x에 대해서 x.reshape(-1, 정수) 를 해주면 '열(column)' 차원의 '정수'에 따라서 12개의 원소가 빠짐없이 배치될 수 있도록 '-1'이 들어가 있는 '행(row)' 의 개수가 가변적으로 정해짐을 알 수 있습니다.

| x.reshape(-1, 1) => shape(12,1) | x.reshape(-1, 2)  => shape(6, 2) | x.reshape(-1, 3) => shape(4, 3) | x.reshape(-1, 4)  => shape(3, 4) | | --- | --- | --- | --- | | In [5]: x.reshape(-1, 1) Out[5]: array([[ 0],         [ 1],         [ 2],         [ 3],         [ 4],         [ 5],         [ 6],         [ 7],         [ 8],         [ 9],         [10],

[11]]) | In [6]: x.reshape(-1, 2) Out[6]: array([[ 0, 1],         [ 2, 3],         [ 4, 5],         [ 6, 7],         [ 8, 9],         [10, 11]])

| In [7]: x.reshape(-1, 3) Out[7]: array([[ 0, 1, 2],         [ 3, 4, 5],         [ 6, 7, 8],         [ 9, 10, 11]])

| In [8]: x.reshape(-1, 4) Out[8]: array([[ 0, 1, 2, 3],         [ 4, 5, 6, 7],         [ 8, 9, 10, 11]])

|

(2) reshape(정수, -1) 의 열(column) 위치에 '-1'이 들어있을 경우


다음으로 reshape()의 열(column) 위치에 '-1'을 넣으면 어떻게 재구조화되는지 살펴보겠습니다.

x의 총 원소 12개가 모두 배열될 수 있도록 행(row)의 정수가 정해지면, 이에 따라서 '-1'이 들어있는 열(column)의 개수가 정해짐을 알 수 있습니다.

즉, 행이나 열의 특정 차원을 기준으로 재배열하고 싶은 행이나 열의 개수가 있으면 나머지 차원의 개수는 '-1'로 해두면 알아서 자동으로 재배열을 해주니 편리한 기능이라고 하겠습니다.

| x.reshape(1, -1)   => shape(1, 12) | In [9]: x.reshape(1, -1) Out[9]: array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]]) | | --- | --- | | x.reshape(2, -1)   => shape(2, 6) | In [10]: x.reshape(2, -1) Out[10]: array([[ 0, 1, 2, 3, 4, 5],

[ 6, 7, 8, 9, 10, 11]]) | | x.reshape(3, -1)   => shape(3, 4) | In [11]: x.reshape(3, -1) Out[11]: array([[ 0, 1, 2, 3],         [ 4, 5, 6, 7],

[ 8, 9, 10, 11]]) | | x.reshape(4, -1)   => shape(4, 3) | In [12]: x.reshape(4, -1) Out[12]: array([[ 0, 1, 2],         [ 3, 4, 5],         [ 6, 7, 8],

[ 9, 10, 11]]) |

(3) reshape(-1) 인 경우


x.reshape(-1)은 x.reshape(1, -1)과 같이 1차원 배열을 반환합니다.

| x.reshape(-1) | In [13]: x.reshape(-1)

Out[13]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]) | | --- | --- | | x.reshape(1, -1) | x.reshape(1, -1) Out[14]: array([[ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11]]) |

(4) ValueError: cannot reshape array of size 12 into shape (5)


reshape(-1, 정수) 또는 reshape(정수, -1) 메소드가 제대로 작동하기 위해서는 한가지 조건이 있는데요, 원래의 배열에 있는 원소가 재구조화 혹은 재배열 되려는 배열의 차원에 빠짐없이 분배가 될 수 있어야 한다는 점입니다.