본문 바로가기
  • Hello_
Python/Numpy

[Python] np.newaxis, np.expand_dims(), np.squeeze() - 차원 및 축 조절하기

by LDwDL 2022. 9. 12.
728x90
반응형

오늘은 numpy로 차원을 늘리고 줄이는 방법에 대해 포스팅해보겠다.

 

np.newaxis()

np.newaxis()는 함수명 그대로 넘파이 어레이의 차원의 수를 늘려주는 역할을 한다.

차원을 늘리고자 하는 인덱스에 np.newaxis를 포함하면 해당하는 차원이 늘어난다.

import numpy as np

example = np.arange(10)
print(example.shape)
# (10,)

exam_1 = example[np.newaxis,:]
exam_2 = example[:,np.newaxis]

print(exam_1.shape, exam_2.shape)
# (1, 10) (10, 1)

 

또한 한 차원이 아니라 여러 차원을 한 번에 늘릴 수도 있다.

exam_3 = example[np.newaxis,:,np.newaxis]
print(exam_3.shape)
# (1, 10, 1)

 

np.expand_dims()

이 또한 np.newaxis의 역할과 동일하다. 다만 np.exapnd_dims의 argument에 늘리고자 하는 넘파이 어레이와 axis 축을 입력으로 받는다.

필자는 이 방법이 더 직관적이고 편하기에 np.newaxis보다 많이 사용한다.

exam_4 = np.expand_dims(example,axis=(0,2))
print(exam_4.shape)
# (1, 10, 1)

 

axis argument는 한 차원을 늘린다면 정수 인자 하나만 들어가도 되나, 두 개 이상의 축을 늘리고자 한다면 tuple 형태로 입력시켜줘야 한다.

 

np.squeeze()

np.squeeze는 1로 구성된 차원들을 모두 제거한다. 이 또한 axis를 인자로 받는다. 하지만 이를 지정하지 않고 default로 두고 함수를 사용한다면 차원이 두개 이상이어도 1의 크기의 차원을 모두 제거하기에 이를 인지하고 있어야 한다.

exam_1_s = np.squeeze(exam_1)
exam_2_s = np.squeeze(exam_2)
exam_3_s = np.squeeze(exam_3)
exam_4_s = np.squeeze(exam_4)

print(exam_1_s.shape,exam_2_s.shape,exam_3_s.shape,exam_4_s.shape)
# (10,) (10,) (10,) (10,)

 

만일 (1,10,1) 크기의 어레이가 있을 때 마지막 차원만 제거하고 싶다면 그에 해당하는 차원만 지정하면 된다.

last_exam = np.squeeze(exam_4,axis=-1)
print(last_exam.shape)
# (1, 10)

 

 

오늘은 차원을 손쉽게 바꿀 수 있는 넘파이 함수들을 알아보았다. 이는 broadcasting 연산을 할 때 차원 불일치를 손쉽게 해결해주며 추후 딥러닝을 위한 입력 데이터의 배치, 데이터 개수, 입력 차원 등 다차원을 다룰 경우 유용하게 사용이 된다.

 

 

 

728x90
반응형

댓글