Метод transpose
Метод transpose класса Tensor выполняет перестановку двух указанных осей (измерений) тензора. Первым параметром метод принимает индекс первой оси, вторым параметром - индекс второй оси, которые необходимо поменять местами. Метод возвращает новый тензор с переставленными осями, при этом исходный тензор остаётся неизменным.
Синтаксис
t.transpose(dim0, dim1)
Пример
Давайте создадим двумерный тензор размером 2 на 3 и поменяем его оси местами:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = t.transpose(0, 1)
print(res)
Результат выполнения кода:
tensor([
[1, 4],
[2, 5],
[3, 6],
])
Как видно из примера, тензор размером 2x3 превратился в тензор размером 3x2, так как оси были переставлены.
Пример
Давайте рассмотрим трёхмерный тензор размером 2x3x4 и поменяем первую и третью оси:
import torch
t = torch.randn(2, 3, 4)
print(f"Original shape: {t.shape}")
res = t.transpose(0, 2)
print(f"Transposed shape: {res.shape}")
Результат выполнения кода:
Original shape: torch.Size([2, 3, 4])
Transposed shape: torch.Size([4, 3, 2])
Размерности первой и третьей осей поменялись местами, а вторая ось осталась на своём месте.
Пример
Давайте продемонстрируем, что метод transpose создаёт новый тензор, а не изменяет исходный:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
res = t.transpose(0, 1)
print("Original tensor:")
print(t)
print("Transposed tensor:")
print(res)
Результат выполнения кода:
Original tensor:
tensor([
[1, 2, 3],
[4, 5, 6],
])
Transposed tensor:
tensor([
[1, 4],
[2, 5],
[3, 6],
])
Исходный тензор t остался неизменным, а переменная res содержит результат перестановки.
Пример
Давайте создадим четырехмерный тензор и поменяем оси 1 и 3:
import torch
t = torch.randn(2, 3, 4, 5)
print(f"Original shape: {t.shape}")
res = t.transpose(1, 3)
print(f"Transposed shape: {res.shape}")
Результат выполнения кода:
Original shape: torch.Size([2, 3, 4, 5])
Transposed shape: torch.Size([2, 5, 4, 3])
Оси с индексами 1 и 3 поменялись местами, а оси 0 и 2 остались на своих позициях.