Функция torch.slice_scatter в PyTorch


Pytorch torch 参考手册Справочное руководство Pytorch torch

torch.slice_scatterЭто функция в PyTorch, используемая для распределения значений исходного тензора по позициям среза входного тензора.

Её действие эквивалентноinput[dim][start:end:step] = src, но она не изменяет исходный тензор; вместо этого возвращает новый тензор.

Определение функции

torch.slice_scatterПолное определение функции выглядит следующим образом:

torch.slice_scatter(input, src, dim=0, start=None, end=None, step=1)

Описание параметра

В следующей таблице перечисленыtorch.slice_scatterего различные параметры:

ПараметрTypeОбязательныйЗначение по умолчаниюОписание
inputTensorОбязательный—Входной тензор, тензор, который нужно изменить.
srcTensorОбязательный—Тензор-источник, значения которого должны быть разбросаны по входному срезу,его размер должен совпадать с размером среза.。
dimintOptional0Размерность для разбрасывания.
startintOptionalNoneНачальный индекс (включаяэтот индекс), по умолчанию 0.
endintOptionalNoneКонечный индекс (не включаяэтот индекс), по умолчанию до конца.
stepintOptional1Размер шага, с тем же значением, что и step в срезах Python.

Возвращаемое значение

Возвращает новый тензор после разбрасывания (torch.Tensor), исходныйinputне будет изменён.


Примеры использования

Следующие примеры демонстрируютtorch.slice_scatterего типичное использование.

Пример

import torch

# Создайте входной тензор и исходный тензор
input = torch.zeros(8, 4)
src = torch.ones(2, 4)

# Распределите src по первым двум строкам input
output = torch.slice_scatter(input, src, dim=0, end=2)

print("Входной тензор:")
print(input)
print("\nИсходный тензор:")
print(src)
print("\nРезультат распределения:")
print(output)

Вывод:

输入张量:
tensor([[0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

源张量:
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.]])

散布结果:
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.],
        [0., 0., 0., 0.]])

Пример

import torch

# Используйте start и end, чтобы указать диапазон
input = torch.zeros(10)
src = torch.tensor([1, 2, 3])

# Распределите src по позициям с индексами 2-4 в input
output = torch.slice_scatter(input, src, dim=0, start=2, end=5)

print("Ввод:", input)
print("Источник:", src)
print("Результат:", output)

Вывод:

输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
源: tensor([1., 2., 3.])
结果: tensor([0., 0., 1., 2., 3., 0., 0., 0., 0., 0.])

Пример

import torch

# Используйте параметр step
input = torch.zeros(10)
src = torch.tensor([1, 2])

# Размер шага равен 2, от индекса 0 до 4 (не включая 4), фактически записывает индексы 0 и 2
output = torch.slice_scatter(input, src, dim=0, start=0, end=4, step=2)

print("Ввод:", input)
print("Источник:", src)
print("Результат с шагом 2:", output)

Вывод:

输入: tensor([0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
源: tensor([1., 2.])
步长为2的结果: tensor([1., 0., 2., 0., 0., 0., 0., 0., 0., 0.])

Примечание:torch.slice_scatterне изменяет исходный входной тензор, а возвращает новый тензор.

Эта функция являетсяtorch.sliceобратная операция для.


Pytorch torch 参考手册Справочное руководство Pytorch torch

Другие расширения