Представления тензоров
Создано: 07 мая 2026 г. | Последнее обновление: 07 мая 2026 г.
PyTorch позволяет тензору быть View существующего тензора. Тензор-представление использует те же базовые данные, что и исходный тензор. Поддержка View позволяет избежать явного копирования данных, благодаря чему можно быстро и эффективно использовать память для изменения формы, срезов и поэлементных операций.
Например, чтобы получить представление существующего тензора t, можно вызвать t.view(...).
>>> t = torch.rand(4, 4) >>> b = t.view(2, 8) >>> t.storage().data_ptr() == b.storage().data_ptr() # `t` and `b` share the same underlying data. True # Modifying view tensor changes base tensor as well. >>> b[0][0] = 3.14 >>> t[0][0] tensor(3.14)
Поскольку представления используют те же базовые данные, что и исходный тензор, изменения данных в представлении также отразятся на исходном тензоре.
Обычно операция PyTorch возвращает новый тензор в качестве результата, например add(). Однако операции-представления возвращают представления входных тензоров, чтобы избежать ненужного копирования данных. При создании представления данные не перемещаются: тензор-представление лишь изменяет способ интерпретации тех же данных. Представление непрерывного тензора потенциально может быть несмежным. Пользователям следует учитывать, что смежность может неявно влиять на производительность. Распространённый пример — transpose().
>>> base = torch.tensor([[0, 1],[2, 3]]) >>> base.is_contiguous() True >>> t = base.transpose(0, 1) # `t` is a view of `base`. No data movement happened here. # View tensors might be non-contiguous. >>> t.is_contiguous() False # To get a contiguous tensor, call `.contiguous()` to enforce # copying data when `t` is not contiguous. >>> c = t.contiguous()
Для справки ниже приведён полный список операций-представлений в PyTorch:
- Операции базовой индексации и индексирования, например
tensor[0, 2:, 1:7:2]возвращает представление исходного тензораtensor; см. примечание ниже. adjoint()as_strided()detach()diagonal()expand()expand_as()movedim()narrow()permute()select()squeeze()transpose()t()THmTmH-
real -
imag view_as_real()unflatten()unfold()unsqueeze()view()view_as()unbind()split()hsplit()vsplit()tensor_split()split_with_sizes()swapaxes()swapdims()chunk()-
indices()(только для разреженных тензоров) -
values()(только для разреженных тензоров)
Примечание
При индексировании содержимого тензора PyTorch следует поведению NumPy: базовая индексация возвращает представления, а расширенная индексация — копию. Присваивание с помощью как базовой, так и расширенной индексации выполняется на месте. Дополнительные примеры см. в документации по индексированию NumPy.
Стоит также упомянуть несколько операций с особенностями поведения:
-
reshape(),reshape_as()иflatten()могут возвращать как представление, так и новый тензор; пользовательский код не должен полагаться на то, будет ли результат представлением. -
contiguous()возвращает сам тензор, если входной тензор уже непрерывен; в противном случае она возвращает новый непрерывный тензор, копируя данные.
Более подробное описание внутренней реализации PyTorch см. в публикации в блоге ezyang о внутреннем устройстве PyTorch.
© 2026, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://docs.pytorch.org/docs/2.14/tensor_view.html