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
'Python > Numpy' 카테고리의 다른 글
Python List의 append와 Numpy 배열의 append 비교 (0) | 2021.11.29 |
---|---|
NumPy 전체 배열 출력 (0) | 2021.10.04 |
두 개의 2차원 넘파이 배열에 0축(axis=0)을 추가하여 하나로 합치기 (0) | 2021.09.30 |
Python에서 OpenCV 임포트시 에러 - ImportError: numpy.core.multiarray failed to import (3) | 2020.11.14 |
NumPy를 사용하여 두 개의 배열을 같은 순서로 무작위 섞기 (0) | 2020.03.19 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!