Spec-Zone.ru › PyTorch 2.14

Представления тензоров

Создано: 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()
  • T
  • H
  • mT
  • mH
  • 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API