Функция torch.narrow_copy в PyTorch
Справочное руководство PyTorch torch
torch.narrow_copyЭто функция в PyTorch, используемая для возврата копии среза тензора. Она возвращает копию среза от начальной позиции до указанной длины по указанному измерению.
Эта функция являетсяtorch.narrowфункционально аналогична, ноtorch.narrowвозвращает представление, тогда какtorch.narrow_copyвозвращает копию.
Определение функции
torch.narrow_copy(input, dim, start, length)
Parameters:
input(Tensor): входной тензор.dim(int): Измерение, по которому выполняется срез.start(int): Начальный индекс.length(int): Длина среза.
Возвращаемое значение:
torch.Tensor: Возвращает копию тензора после указанного среза.
Пример использования
Пример
import torch
# Создайте тензор
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# В первом измерении (строки) взять 2 строки, начиная с индекса 0
y = torch.narrow_copy(x, dim=0, start=0, length=2)
print("Исходный тензор:")
print(x)
print("nКопия среза:")
print(y)
# Изменение копии не влияет на исходный тензор
y[0, 0] = 100
print("nПосле изменения копии, исходный тензор:", x[0, 0])
print("После изменения копии, копия среза:", y[0, 0])
# Создайте тензор
x = torch.tensor([[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]])
# В первом измерении (строки) взять 2 строки, начиная с индекса 0
y = torch.narrow_copy(x, dim=0, start=0, length=2)
print("Исходный тензор:")
print(x)
print("nКопия среза:")
print(y)
# Изменение копии не влияет на исходный тензор
y[0, 0] = 100
print("nПосле изменения копии, исходный тензор:", x[0, 0])
print("После изменения копии, копия среза:", y[0, 0])
Результат вывода:
原始张量:
tensor([[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9, 10, 11, 12]])
切片副本:
tensor([[1, 2, 3, 4],
[5, 6, 7, 8]])
修改副本后,原始张量: tensor(1)
修改副本后,切片副本: tensor(100)
Пример
import torch
# Создать 3D-тензор
x = torch.randn(5, 6, 7)
# Во втором измерении взять 4 элемента, начиная с индекса 2
y = torch.narrow_copy(x, dim=1, start=2, length=4)
print("Исходная форма:", x.shape)
print("Форма копии среза:", y.shape)
# Создать 3D-тензор
x = torch.randn(5, 6, 7)
# Во втором измерении взять 4 элемента, начиная с индекса 2
y = torch.narrow_copy(x, dim=1, start=2, length=4)
print("Исходная форма:", x.shape)
print("Форма копии среза:", y.shape)
Результат вывода:
原始形状: torch.Size([5, 6, 7]) 切片副本形状: torch.Size([5, 4, 7])
Примечание:torch.narrow_copyОна возвращает копию, а не представление. Это означает, что изменение возвращённого тензора не влияет на исходный тензор, но потребляет дополнительную память. Если независимая копия не нужна, можно использоватьtorch.narrowчтобы сэкономить память.
Другие расширения