Python

[pytorch] transpose, permute 함수

토오오끼 2023. 5. 21. 23:40
728x90
반응형

pytorch로 permute 함수를 사용하다가 transpose랑 비슷한 것 같은데 정확히 차이를 모르고 있구나 싶어서 찾아보고 기록하기 위해 해당 포스트를 작성하게 되었다.

 

◾ permute()

먼저, permute 함수는 모든 차원을 맞교환 할 수 있는 함수로 차원을 교환하면서 contiguous한 성질이 사라진다는 특징이 있다. 

permute() 괄호 안에 인덱스들을 바꾸고자 하는 위치대로 적어주면 된다.

x = torch.rand(1, 2, 3)
x1 = x.permute(2, 1, 0)

>> output
[3, 2, 1]

위 예시에서는 기존에 0,1,2번 인덱스를 가진 [1,2,3]을 2,1,0번 인덱스 순서로 바꿔 [3,2,1]로 바꿔주었기 때문에 output이 [3,2,1]이 되는 것이다.

 

 

◾ transpose()

반면에, transpose() 함수는 permute 함수와 달리 두 개의 차원만 맞교환 할 수 있다.

transpose() 괄호 안에는 교환하고자 하는 인데스 2개를 적어주면 된다.

 

y = torch.rand(1, 2, 3)
y1 = y.transpose(0, 2)

>> output
[3, 2, 1]

위 예시와 같이 교환하고자 하는 인덱스 두개를 순서대로 적어주면 0번 인덱스와 2번 인덱스가 변경되어 [1,2,3]이었던 것이 [3,2,1]로 변경된다.

 

 

이 둘은 tensor의 shape을 바꿀 때 사용할 수 있으며, 원본 tensor와 data를 공유하면서 new tensor를 반환하게 된다.

 

 

728x90
반응형