[파이썬 numpy] 배열의 전치를 원하는 방향으로 (transpose 메소드)
[파이썬 numpy]
배열의 전치를 원하는 방향으로 (transpose 메소드)
transpose 메소드는 T메소드보다 확장된 방법이다. T메소드는 배열의 shape을 역방향으로 바꾸는 것만 할 수 있지만 transpose 메소드는 원하는 방향으로 바꿀 수가 있다.
방향이 정방향과 역방향 둘 뿐인 2차원 배열에서는 T메소드와 transpose 메소드의 결과가 같다. 하지만 3차원 이상에서는 달라질 수 있다.
2차원 배열
shape이 (2,3)인 배열을 하나 정의하자. 2행 3열로 해석할 수도 있다.
>>> A=np.arange(6).reshape(2,3)
>>> A
array([[0, 1, 2],
[3, 4, 5]])
T메소드를 적용해보자.
>>> A.T
array([[0, 3],
[1, 4],
[2, 5]])
shape 이 (2,3)에서 (3,2)로 바뀐다.
이번에는 transpose 메소드를 적용해보자. 변수에 메소드를 직접 적용해도 되고, 메소드에 변수를 적용해도 된다.
>>> A.transpose()
array([[0, 3],
[1, 4],
[2, 5]])
또는
>>> np.transpose(A)
array([[0, 3],
[1, 4],
[2, 5]])
T메소드와 결과가 동일하다는 것을 알 수 있다.
3차원배열
shape이 (2,3,4)인 배열을 하나 정의하자. 3행4열이 두 층 쌓여있는 것으로 이해할 수 있다.
>>> A=np.arange(24).reshape(2,3,4)
>>> A
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
T메소드를 적용해보자.
>>> A.T
array([[[ 0, 12],
[ 4, 16],
[ 8, 20]],
[[ 1, 13],
[ 5, 17],
[ 9, 21]],
[[ 2, 14],
[ 6, 18],
[10, 22]],
[[ 3, 15],
[ 7, 19],
[11, 23]]])
>>> A.T.shape
Out[558]: (4, 3, 2)
배열 모양이 (2,3,4)에서 (4,3,2)로 바뀐 것을 알 수 있다.
transpose 메소드를 적용해보자.
>>> A.transpose((2,1,0))
array([[[ 0, 12],
[ 4, 16],
[ 8, 20]],
[[ 1, 13],
[ 5, 17],
[ 9, 21]],
[[ 2, 14],
[ 6, 18],
[10, 22]],
[[ 3, 15],
[ 7, 19],
[11, 23]]])
괄호 안에는 입력한 것은 axis번호다. 기존 shape인 (2,3,4)는 각각 axis0,1,2 에 매칭되어 있었다. 기존 axis는 아래와 같다.
axis0=2
axis1=3
axis2=4
새로 입력한 (2,1,0)은 순서를 아래와 같이 바꾼다는 것을 의미한다. axis 뒤에 붙은 숫자를 잘 보면 이해가 될거다.
axis2=4
axis1=3
axis0=2
따라서 shape이 (4,3,2)로 바뀐것이다.
>>> A.transpose((2,1,0)).shape
(4, 3, 2)
이번에는 A를 axis (1,2,0)으로 transpose해보자. 결과가 어떻게 될까?
axis1=3
axis2=4
axis0=2
위와 같이 바뀔테니, shape이 (3,4,2)가 될 것이다.
>>> A.transpose((1,2,0))
array([[[ 0, 12],
[ 1, 13],
[ 2, 14],
[ 3, 15]],
[[ 4, 16],
[ 5, 17],
[ 6, 18],
[ 7, 19]],
[[ 8, 20],
[ 9, 21],
[10, 22],
[11, 23]]])
>>> A.transpose((1,2,0)).shape
Out[562]: (3, 4, 2)