РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
42 of 769 menu

Метод is_contiguous

Метод is_contiguous проверяет, является ли тензор непрерывным в памяти. Непрерывность означает, что элементы тензора хранятся в оперативной памяти подряд без промежутков, в порядке, соответствующем его размерности. Это свойство влияет на производительность многих операций: например, view требует непрерывного тензора, а операции типа transpose или permute могут нарушать непрерывность. Метод возвращает логическое значение True или False.

Синтаксис

t.is_contiguous()

Метод не принимает аргументов.

Пример

Давайте создадим обычный тензор и проверим его непрерывность:

import torch t = torch.tensor([1, 2, 3, 4, 5]) print(t.is_contiguous())

Результат выполнения кода:

True

Тензор, созданный напрямую из списка, всегда является непрерывным.

Пример

Теперь создадим двумерный тензор и применим к нему операцию transpose, которая нарушает непрерывность:

import torch t = torch.tensor([ [1, 2, 3], [4, 5, 6], ]) t_transposed = t.transpose(0, 1) print(t_transposed.is_contiguous())

Результат выполнения кода:

False

После транспонирования тензор становится разреженным в памяти, и метод возвращает False.

Пример

Метод is_contiguous часто используется перед вызовом view, так как view требует непрерывного тензора:

import torch t = torch.tensor([ [1, 2, 3], [4, 5, 6], ]) t_transposed = t.transpose(0, 1) if t_transposed.is_contiguous(): t_reshaped = t_transposed.view(-1) else: t_contiguous = t_transposed.contiguous() t_reshaped = t_contiguous.view(-1) print(t_reshaped)

Результат выполнения кода:

tensor([1, 4, 2, 5, 3, 6])

Если бы мы попытались применить view к t_transposed напрямую, получили бы ошибку. Метод is_contiguous помогает безопасно обработать эту ситуацию.

Пример

Рассмотрим, как метод contiguous делает тензор непрерывным:

import torch t = torch.tensor([ [1, 2, 3], [4, 5, 6], ]) t_transposed = t.transpose(0, 1) print("После transpose:", t_transposed.is_contiguous()) t_contiguous = t_transposed.contiguous() print("После contiguous:", t_contiguous.is_contiguous())

Результат выполнения кода:

После transpose: False После contiguous: True

Метод contiguous создает новую копию тензора в непрерывном формате памяти.

Пример

Метод is_contiguous также работает с многомерными тензорами. Рассмотрим пример с permute:

import torch t = torch.randn(2, 3, 4) print("Исходный:", t.is_contiguous()) t_permuted = t.permute(2, 0, 1) print("После permute:", t_permuted.is_contiguous())

Результат выполнения кода:

Исходный: True После permute: False

Перестановка размерностей также нарушает непрерывность тензора.

Смотрите также

  • метод contiguous,
    который создает непрерывную копию тензора
  • метод view,
    который изменяет форму тензора и требует непрерывности
  • метод transpose,
    который меняет местами две размерности и нарушает непрерывность
  • метод permute,
    который переставляет размерности и нарушает непрерывность
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить