본문 바로가기

Python/NumPy

[Numpy] 배열의 축을 전치하는 함수: np.transpose

배열의 축을 전치하는 함수: np.transpose

 

Numpy모듈에서 축이 전치된 배열을 반환하는 함수인 transpose에 대해 정리해 보도록 하겠습니다.
공식문서를 참고해서 작성했습니다.

import numpy as np

#함수 사용법
np.transpose(a, axes=None)

[ Parameters ]

a: 전치할 배열(input)


axes:
- 정수형 튜플 혹은 리스트 (옵션 매개변수)
- 값을 지정할 것이라면 반드시 전치할 배열 a의 축 수와 크기가 동일한 튜플 혹은 리스트여야 합니다.
반환되는 배열의 i번째 축은 파라미터로 전달되는 axes의 i번째 원소와 같기 때문입니다.


[ Returns ]
input 배열 a의 축이 재배치된 n차원 배열(ndarray)을 반환합니다. 


(만약 input 배열 a가 1차원 배열이라면, 축이 하나이기 때문에 바뀌지 않은 그대로의 배열 a를 반환합니다.)
예를 들면 다음과 같습니다.

import numpy as np

a = np.array([[1, 2], [3, 4]])
b = np.transpose(a, [1, 0]) # a의 0번째 축과 1번째 축을 교환
print(a, a.shape, end='\n\n')
print(b, b.shape)

# 출력 결과
[[1 2]
 [3 4]] (2, 2)
 
[[1 3]
 [2 4]] (2, 2)

위의 예시를 보면 transpose 함수의 매개변수로 전달되는 값이 axes[0] = 1, axes[1] = 0이므로 a의 0번 축과 1번 축이 교환된 배열을 반환니다.


여기서 배열 a는 0번 축, 1번 축만 존재하는 배열이기 때문에, axes의 값은 0 또는 1로 이루어진 튜플이거나 리스트여야 한다는 것이고요, 아니면 에러가 발생합니다.


- 만약, axes 값을 지정하지 않는다면 기본값은 range(a.ndim)[::-1] 으로 지정되며 이에 따라 축의 순서가 역순으로 바뀌게 됩니다.

import numpy as np

a = np.array([[[1, 2], [3, 4], [5, 6]]])
b = np.transpose(a)
print(a, a.shape, end='\n\n')
print(b, b.shape)

# 출력 결과
[[[1 2]
  [3 4]
  [5 6]]] (1, 3, 2)

[[[1]
  [3]
  [5]]

 [[2]
  [4]
  [6]]] (2, 3, 1)

위처럼 축이 역순으로 바뀌면, 배열의 shape도 (1, 3, 2) 에서 (2, 3, 1)로 역순으로 바뀐다는 것을 확인할 수 있습니다.


a가 3차원 배열이라면 단순히 행과 열을 교환하는 것이 아니기 때문에 헷갈릴 수도 있는데요. 
해당되는 각각의 축을, 서로 바꿔준다고 생각하면 됩니다. 


위의 예시에서는 결국, 0번 축과 2번 축을 교환해 준 것인데요. 

 
: 배열 a의 2번 축
결과적으로, 위의 배열 a의 2번 축이 b의 0번 축이 된 것입니다.
 
numpy.transpose 함수와 비슷한 용도로 사용할 수 있는 다른 함수들도 있는데, 이건 다음에 알아보도록 하겠습니다.