반응형

Numpy 배열의 차원을 추가하는 expand_dims 사용법을 파악해보려고 테스트해본 내용입니다. 

파이썬 인터프리터에서 진행했기 때문에 차례대로 코드를 실행해 봐야 합니다. 




2021. 9. 15 - 최초작성



테스트에 사용할 1차원 넘파이 배열 x를 생성합니다.

넘파이 배열의 원소가 2개 이기 때문에 넘파이 배열의 shape는 (2, ) 입니다.   

 

>>> import numpy as np
>>> x = np.array([3, 4])
>>> x
array([3, 4])
>>> x.shape
(2,)




참고로 넘파이 배열의 shape 출력 결과에서 다음 순서대로 축의 순서가 정해집니다. 

(첫번째 축, 두번째 축, 세번째 축, … )



참고로 이 부분을 시각화하여 설명한 내용은 제가 쓴 책인 “파이썬과 NumPy로 배우는 선형대수”의 63페이지에 넘파이 배열 시각화 방법으로 설명되어 있습니다. 

 

또는 아래 이미지를 보세요.(출처 - https://i.ytimg.com/vi/cwzGiiX59aw/maxresdefault.jpg  )




첫번째 축에 차원을 추가합니다. expand_dims 대신에  x[np.newaxis, :]  또는 x[np.newaxis]를 사용할 수 도 있습니다.

넘파이 배열의 shape 출력 결과를 보면 원래 (2,)에서 (1, 2)로 변경된 것을 볼 수 있습니다. 

첫번째 축에 차원이 추가되어 2 앞에 1이 추가된 것입니다. 

 

>>> y = np.expand_dims(x, axis=0)
>>> y
array([[3, 4]])
>>> y.shape
(1, 2)

 

>>> y = x[np.newaxis, : ]
>>> y
array([[3, 4]])
>>> y.shape
(1, 2)




두번째 축에 차원을 추가합니다. expand_dims 대신에 x[ :, np.newaxis]를 사용할 수도 있습니다. 

넘파이 배열의 shape 출력 결과를 보면 원래 (2,)에서 (2, 1)로 변경된 것을 볼 수 있습니다. 

두번째 축에 차원이 추가되어 2 뒤에 1이 추가된 것입니다. 

 

>>> y = np.expand_dims(x, axis=1)
>>> y
array([[3],
      [4]])
>>> y.shape
(2, 1)



>>> y =x[ :, np.newaxis]
>>> y
array([[3],
      [4]])
>>> y.shape
(2, 1)




튜플을 사용하여 2개의 축에 차원을 한꺼번에 추가할 수도 있습니다.  



>>> y = np.expand_dims(x, axis=(0, 1))
>>> y
array([[[3, 4]]])
>>> y.shape
(1, 1, 2)



>>> y = np.expand_dims(x, axis=(2, 0))
>>> y
array([[[3],
        [4]]])
>>> y.shape
(1, 2, 1)



>>> y = np.expand_dims(x, axis=(0, 2))
>>> y
array([[[3],
        [4]]])
>>> y.shape
(1, 2, 1)




앞에서 사용한 np.newaxis 대신에 None을 사용할 수도 있다고 합니다. 

다음처럼 이 둘이 같은 객체라는 것을 확인할 수 있습니다. 

 

np.newaxis is None
True




참고

https://numpy.org/doc/stable/reference/generated/numpy.expand_dims.html





반응형

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

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


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

+ Recent posts