반응형
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 |