Метод reshape_as
Метод reshape_as изменяет форму исходного тензора, используя форму другого тензора в качестве образца. Метод принимает один параметр - тензор, чья форма будет использована для изменения формы текущего тензора. Общее количество элементов в тензоре должно совпадать с общим количеством элементов в тензоре-образце. Метод возвращает новый тензор с изменённой формой, при этом исходный тензор остаётся неизменным. В отличие от метода view, метод reshape_as может создавать копию данных, если тензор не является непрерывным в памяти.
Синтаксис
tensor.reshape_as(other)
Пример
Давайте изменим форму одномерного тензора из пяти элементов в форму двумерного тензора размером 2x3 (при этом один элемент будет лишним, поэтому возьмём тензор из шести элементов):
import torch
t = torch.tensor([1, 2, 3, 4, 5, 6])
other = torch.zeros(2, 3)
res = t.reshape_as(other)
print(res)
Результат выполнения кода:
tensor([
[1, 2, 3],
[4, 5, 6],
])
Пример
Давайте изменим форму двумерного тензора размером 2x3 в форму трёхмерного тензора размером 2x1x3:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
other = torch.zeros(2, 1, 3)
res = t.reshape_as(other)
print(res)
Результат выполнения кода:
tensor([
[
[1, 2, 3],
],
[
[4, 5, 6],
],
])
Пример
Давайте изменим форму тензора из шести элементов в форму одномерного тензора с помощью тензора-образца размером 6:
import torch
t = torch.tensor([
[1, 2, 3],
[4, 5, 6],
])
other = torch.zeros(6)
res = t.reshape_as(other)
print(res)
Результат выполнения кода:
tensor([1, 2, 3, 4, 5, 6])
Пример
Давайте попробуем изменить форму тензора из шести элементов в форму тензора размером 2x4, что невозможно, так как общее количество элементов не совпадает:
import torch
t = torch.tensor([1, 2, 3, 4, 5, 6])
other = torch.zeros(2, 4)
res = t.reshape_as(other)
print(res)
Результат выполнения кода:
RuntimeError: shape '[2, 4]' is invalid for input of size 6