Метод expand_as
Метод expand_as расширяет тензор до формы,
заданной другим тензором. Возвращается новый тензор,
который разделяет данные с исходным. Метод работает
только для размерностей, где исходный размер равен 1.
Для остальных размерностей форма должна совпадать.
Метод не копирует данные, что делает его эффективным
с точки зрения памяти.
Синтаксис
tensor.expand_as(other_tensor)
Пример
Давайте расширим одномерный тензор до формы двумерного тензора:
import torch
t = torch.tensor([1, 2, 3])
other = torch.tensor([[0, 0, 0], [0, 0, 0]])
res = t.expand_as(other)
print(res)
Результат выполнения кода:
tensor([
[1, 2, 3],
[1, 2, 3],
])
Исходный тензор t имеет форму (3,),
другой тензор other имеет форму (2, 3).
Метод расширяет первый тензор до формы второго.
Пример
Расширение одномерного тензора до формы трёхмерного
тензора с размерами 2 x 3 x 4:
import torch
t = torch.tensor([1, 2, 3, 4])
other = torch.zeros(2, 3, 4)
res = t.expand_as(other)
print(res.shape)
print(res)
Результат выполнения кода:
torch.Size([2, 3, 4])
tensor([
[
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
],
[
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
],
])
Пример
Метод expand_as работает только когда
расширяемая размерность равна 1. Рассмотрим
ошибочный случай:
import torch
t = torch.tensor([[1, 2], [3, 4]])
other = torch.zeros(3, 2)
res = t.expand_as(other)
Результат выполнения кода:
RuntimeError: The expanded size of the tensor (3) must match the existing size (2)
Ошибка возникает, потому что первая размерность
исходного тензора равна 2, а мы пытаемся
расширить её до 3.
Пример
Расширение одномерного тензора до формы четырёхмерного тензора:
import torch
t = torch.tensor([5, 6])
other = torch.zeros(2, 3, 4, 2)
res = t.expand_as(other)
print(res.shape)
Результат выполнения кода:
torch.Size([2, 3, 4, 2])