Функция torch.slice_scatter в PyTorch
Справочное руководство 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 | Обязательный | Значение по умолчанию | Описание |
|---|---|---|---|---|
input | Tensor | Обязательный | — | Входной тензор, тензор, который нужно изменить. |
src | Tensor | Обязательный | — | Тензор-источник, значения которого должны быть разбросаны по входному срезу,его размер должен совпадать с размером среза.。 |
dim | int | Optional | 0 | Размерность для разбрасывания. |
start | int | Optional | None | Начальный индекс (включаяэтот индекс), по умолчанию 0. |
end | int | Optional | None | Конечный индекс (не включаяэтот индекс), по умолчанию до конца. |
step | int | Optional | 1 | Размер шага, с тем же значением, что и step в срезах Python. |
Возвращаемое значение
Возвращает новый тензор после разбрасывания (torch.Tensor), исходныйinputне будет изменён.
Примеры использования
Следующие примеры демонстрируютtorch.slice_scatterего типичное использование.
Пример
# Создайте входной тензор и исходный тензор
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.]])
Пример
# Используйте 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.])
Пример
# Используйте параметр 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обратная операция для.
Другие расширения