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