본문 바로가기
Python

Numpy.reshape ( -1 )

by 코딩하는 미토콘드리아 bioinformatics 2022. 1. 2.
반응형

reshape 함수에 -1을 인자로 적용하는 경우

더욱 효율적으로 사용할 수 있다.

 

-1을 인자로 사용하면 원래 ndarray 와 호환되는 

새로운 shape 로 알아서 변환 해준다. 

 

예제를 통해 알아 보겠다.

array1 = np.arange(10)
print(array1)

array2 = array1.reshape(-1 ,5)
print('array2 shape:', array2.shape)

array3 = array1.reshape(5, -1)
print('array3 shape:', array3.shape)

[output]

[0 1 2 3 4 5 6 7 8 9]
array2 shape: (2, 5)
array3 shape: (5, 2)

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

array1에는 1차원 배열로 0 ~ 9 까지의 데이터를 가지게 만들어준다.

array2 는 array1의 reshape(-1 , 5) 배열로,

로우 인자가 -1, 컬럼 인자가 5이다. 

이것은 array1 과 호환될 수 있는 2차원 배열로

고정된 5개의 컬럼에 맞게 로우를

자동으로 생성해 변환하라는 의미이다.

 

즉, array1에서 10개의 1차원 데이터가

알맞는 2차원 배열로 변환된 것이다.

 

array3 도 마찬가지이다. 10개의 1차원 데이터와

호환될 수 있는 고정된 5개의 로우에 맞는 컬럼은 2개

5 x 2 의 2차원 배열로 변환 된 것이다.

 

실전에서

여러 개의 넘파이 array는 stack 이나 concat 으로 결합되는데

각각의 array의 형태를 통일할 때 reshape(-1) 인자가 유용하게 사용된다.

 

reshape(-1) 을 이용해 배열 변환

array1 = np.arange(8)
array3d = array1.reshape((2,2,2))
print('array3d : \n', array3d.tolist())

#3차원을 2차원으로
array5 = array3d.reshape(-1 ,1)
print('array5:\n', array5.tolist())
print('array5 shape:', array5.shape)

#1차원을 2차원으로
array6 = array1.reshape(-1 ,1)
print('array6:\n', array6.tolist())
print('array6 shape:', array6.shape)

#tolist() 함수로 ndarray를 리스트로 변경

[outcome]

array3d : 
 [[[0, 1], [2, 3]], [[4, 5], [6, 7]]]
array5:
 [[0], [1], [2], [3], [4], [5], [6], [7]]
array5 shape: (8, 1)
array6:
 [[0], [1], [2], [3], [4], [5], [6], [7]]
array6 shape: (8, 1)

Reference

1. https://numpy.org/devdocs/reference/generated/numpy.recarray.reshape.html

 

numpy.recarray.reshape — NumPy v1.23.dev0 Manual

 

numpy.org

2. 파이썬 머신러닝 완벽가이드 위키북스 데이터 사이언스 시리즈

반응형

'Python' 카테고리의 다른 글

python 으로 csv 파일 합치기  (0) 2022.01.04
Numpy 인덱싱 (indexing)  (0) 2022.01.03
Numpy.reshape  (0) 2021.12.28
Numpy.arange, zeros, ones  (0) 2021.12.26
Numpy.ndarray  (0) 2021.12.26