반응형

NumPy reshape에 -1을 사용하는 이유는 shape에서 -1로 지정한 차원은 알아서 계산되게 하기 위해서입니다.



2021. 10. 4. 최초작성



>>> import numpy as np



크기 6인 1차원 배열을 생성합니다.

 

>>> a = np.array([1, 2, 3, 4, 5, 6])

 

>>> a

array([1, 2, 3, 4, 5, 6])

 

>>> a.shape

(6,)



두번째 차원을 2로 지정하고 첫번째 차원은 알아서 지정되도록 -1로 합니다. 

첫번째 차원이 자동으로 3으로 지정됩니다. 

전체 원소 개수가 6개인데 두번째 차원을 2로 고정하면 첫번쨰 차원은 3이 되어야 하기 때문입니다.

    6 = 2 x 3

 

>>> b = a.reshape(-1,2)

 

>>> b

array([[1, 2],

       [3, 4],

       [5, 6]])

 

>>> b.shape

(3, 2)



>>> a.reshape(3,-1)

array([[1, 2],

       [3, 4],

       [5, 6]])



첫번째 차원을 3으로 지정하고 두번째 차원은 알아서 지정되도록 -1로 합니다.

두번째 차원은 자동으로 2로 지정됩니다.

전체 원소 개수가 6개인데 첫번째 차원을 3로 고정하면 두번째 차원은 2이 되어야 하기 때문입니다.

    6 = 2 x 3

 

>>> c = a.reshape(3,-1)

 

>>> c

array([[1, 2],

       [3, 4],

       [5, 6]])

 

>>> c.shape

(3, 2)



차원 지정없이 -1만 사용하면 1차원 배열이 됩니다. 

 

>>> d = c.reshape(-1)

 

>>> d

array([1, 2, 3, 4, 5, 6])

 

>>> d.shape

(6,)




주의할 점은 차원 개수가 맞지 않으면 에러가 발생합니다.

11개의 원소를 가지는 1차원 배열 e의 shape를 변경하다가 에러가 났습니다. 

전체가 11개인데 첫번째 차원을 3으로 하고 두번째 차원은 자동으로 지정되도록 -1로 하게되면 

갯수를 맞출수 없어 에러가 발생합니다. 

 

>>> e = np.arange(11)

 

>>> e

array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

 

>>> e.shape

(11,)

 

>>> f = e.reshape(3,-1)

Traceback (most recent call last):

  File "<stdin>", line 1, in <module>

ValueError: cannot reshape array of size 11 into shape (3,newaxis)



전체가 12개가 되어야 12 = 3 x 4가 되어 두번째 차원을 4로 자동 지정 할 수 있습니다.





출처 : https://stackoverflow.com/questions/18691084/what-does-1-mean-in-numpy-reshape 


반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts