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

Функция clone

Функция clone создает новый тензор, который является полной копией исходного тензора с собственным выделенным хранилищем данных. Это означает, что изменения в копии не влияют на оригинал, и наоборот. Метод не принимает аргументов и возвращает новый тензор с теми же размерами, типом данных и устройством, что и у исходного тензора.

Важно отметить, что clone всегда выполняет глубокое копирование данных, в отличие от операции присваивания или методов detach и as_tensor, которые могут создавать представления или разделять память с исходным тензором.

Синтаксис

tensor.clone()

Пример

Создадим простой тензор и сделаем его полную копию с помощью метода clone:

import torch t = torch.tensor([1, 2, 3, 4, 5]) t_clone = t.clone() print("Original:", t) print("Clone: ", t_clone)

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

Original: tensor([1, 2, 3, 4, 5]) Clone: tensor([1, 2, 3, 4, 5])

Пример

Продемонстрируем, что копия полностью независима от оригинала. Изменим значение в копии и убедимся, что исходный тензор не изменился:

import torch t = torch.tensor([1, 2, 3, 4, 5]) t_clone = t.clone() t_clone[0] = 100 print("Original after clone modification:", t) print("Clone after modification: ", t_clone)

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

Original after clone modification: tensor([1, 2, 3, 4, 5]) Clone after modification: tensor([100, 2, 3, 4, 5])

Пример

Метод clone сохраняет все атрибуты тензора, включая тип данных и устройство. Скопируем тензор на GPU (если доступен) и проверим его устройство:

import torch if torch.cuda.is_available(): t = torch.tensor([1, 2, 3, 4, 5], device='cuda') t_clone = t.clone() print("Original device:", t.device) print("Clone device: ", t_clone.device) else: print("CUDA is not available")

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

Original device: cuda:0 Clone device: cuda:0

Пример

Важно помнить, что clone создает новый тензор даже для тензоров, которые сами являются представлениями других тензоров. Это часто используется для создания непрерывной копии данных после операций перестановки размерностей:

import torch t = torch.tensor([ [1, 2, 3], [4, 5, 6], ]) t_transposed = t.transpose(0, 1) t_clone = t_transposed.clone() print("Is transposed contiguous:", t_transposed.is_contiguous()) print("Is clone contiguous: ", t_clone.is_contiguous()) t_clone[0, 0] = 99 print("Original after clone modification:\n", t)

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

Is transposed contiguous: False Is clone contiguous: True Original after clone modification: tensor([ [1, 2, 3], [4, 5, 6], ])

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

  • метод detach,
    который создает тензор, отсоединенный от вычислительного графа, но разделяющий память
  • функцию as_tensor,
    которая преобразует данные в тензор без лишнего копирования по возможности
  • функцию tensor,
    которая создает тензор из списка или массива, копируя данные
  • функцию from_numpy,
    которая создает тензор из массива NumPy, разделяя память
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить