-
[NumPy_3] 배열의 차원 확장NAN/Python 2021. 6. 30. 20:38728x90
배열의 차원 확장
numpy 이를 통해 배열을 다루다 보면 종종 1차원 배열을 다차원으로 확장해야 하는 경우가 생기는데
이때 사용할 수 있는 함수를 알아보자
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6]) print(arr.shape) print(arr) (6,) [1 2 3 4 5 6]1부터 6까지의 요소를 갖는 array 이를 만들고 모양을 확인하니 (6, ) 형태가 출력되었는데,
이를 다차원 배열로 바꾸기 위해서는 numpy.newaxis 라는 기능이 필요하다.
newaxis는 지정된 위치에서 축을 하나 추가함으로써 차원을 확장하는 역할을 한다.
arr2 = arr[np.newaxis, :] print(arr2.shape) print(arr2) (1, 6) [[1 2 3 4 5 6]]np.newaxis가 어디에 위치하느냐에 따라 확장되는 부분이 각각 달라지는데, 이 경우 첫 번째 축에 사용되어
첫 번째 축에 새 차원이 확장되어 0차원은 1, 1차원은 6을 가지게 되었다.
arr2 = arr[:,np.newaxis] print(arr2.shape) print(arr2) (6, 1) [[1] [2] [3] [4] [5] [6]]이번엔 array를 행에 위치시키고 열 위치제 newaxis를 넣으니, 0차원이 6 1차원은 1을 가지는 구조로 변환되었는데,
여기에 축을 n번만큼 추가하게되면 추가 한 만큼 고차원 배열을 갖게 될 수 있다.
직관적으로 이해하기
import numpy as np arr = np.array([[[1],[2],[3]],[[4],[5],[6]]]) print(arr.shape) print(arr) (2, 3, 1) [[[1] [2] [3]] [[4] [5] [6]]]다음과 같은 3차원 배열을 4차원으로 확장시키기 위해 newaxis를 사용해보자
arr2 = arr[ : , np.newaxis, :, :] print(arr2.shape) print(arr2) (2, 1, 3, 1) [[[[1] [2] [3]]] [[[4] [5] [6]]]]어느 위치에 newaxis를 넣어도 새로운 축이 모두 추가되는 걸 확인할 수 있다.
np.expand_dims() 함수역시 newaxis와 비슷한 개념이기 때문에 마찬가지로 배열 확장에 용이하니 참고하자
np.expand_dims()
기본 형태 : np.expand_dims(array, axis)
array : intup array
axis : int 혹은 int tuple의 확장하고자 하는 축을 입력
import numpy as np arr = np.array([1, 2]) print(arr.shape) (2,) arr2 = np.expand_dims(arr, axis=0) print(arr2) print(arr2.shape) [[1 2]] (1, 2)arr2 = np.expand_dims(arr, axis = (0,1)) print(arr2) [[[1 2]]] arr2 = np.expand_dims(arr,axis = (1,2)) print(arr2) [[[1]] [[2]]]이처럼 사용하고, 여러 위치에 축을 추가 할 때는 tuple 타입으로 추가하고자 하는 위치에 넣어준다.
reshape의 경우 구성하는 원소의 수가 변할 수 없어 정적이지만
위 두가지 방법은 자유롭게 축을 설정할 수 있어 인덱싱에 유용하게 사용할 수 있고 계산에도 용이하다는
강점이 있다.
np.newaxis를 이용한 계산
arr = np.arange(3) print(arr) [0 1 2] arr1 = arr[:, np.newaxis] print(arr1) [[0] [1] [2]] arr2 = arr[:, np.newaxis] * arr print(arr2) [[0 0 0] [0 1 2] [0 2 4]] arr3 = arr[:, np.newaxis] + arr print(arr3) [[0 1 2] [1 2 3] [2 3 4]]

'NAN > Python' 카테고리의 다른 글
[NumPy_5] 난수 / 고유 항목 다루기 / 행렬 전치 / 배열 뒤집기 재구성 (0) 2021.06.30 [NumPy_4] 기존 데이터에서 배열 만들기 / 배열 연산 (0) 2021.06.30 [ NumPy_2] 차원 크기 모양 / 다차원 인덱싱 슬라이싱 (0) 2021.06.29 [NumPy_1] 소개 / 배열 만들기 / 원소 다루기 (0) 2021.06.29 [Python] 모듈 (0) 2021.06.24