Функция torch.select_scatter в PyTorch
Справочное руководство PyTorch torch
torch.select_scatterявляется функцией в PyTorch, используемой для распределения исходного тензора в указанную позицию индекса. Онаsrcразмещает значенияinputв указанное измерениеdimи индексindexпозицию.
Определение функции
torch.select_scatter(input, src, dim, index)
Parameters:
input(Tensor): Входной тензор, т. е. тензор, который нужно изменить.src(Tensor): Исходный тензор, значения, которые должны быть распределены в input.dim(int): Измерение распределения.index(int): Индекс позиции распределения.
Возвращаемое значение:
torch.Tensor: Возвращает изменённый тензор.
Примеры использования
Пример
import torch
# Создать входной тензор и исходный тензор
input = torch.zeros(4, 4)
src = torch.ones(4)
# Распределить src в позиции с индексом 1 в первом измерении (строки)
output = torch.select_scatter(input, src, dim=0, index=1)
print("Входной тензор:")
print(input)
print("nТензор-источник:")
print(src)
print("nРезультат Scatter в позиции с индексом 1:")
print(output)
# Создать входной тензор и исходный тензор
input = torch.zeros(4, 4)
src = torch.ones(4)
# Распределить src в позиции с индексом 1 в первом измерении (строки)
output = torch.select_scatter(input, src, dim=0, index=1)
print("Входной тензор:")
print(input)
print("nТензор-источник:")
print(src)
print("nРезультат Scatter в позиции с индексом 1:")
print(output)
Результат вывода:
输入张量:
tensor([[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
源张量:
tensor([1., 1., 1., 1.])
在索引1位置散布结果:
tensor([[0., 0., 0., 0.],
[1., 1., 1., 1.],
[0., 0., 0., 0.],
[0., 0., 0., 0.]])
Пример
import torch
# Создать 3D-тензор
input = torch.zeros(3, 4, 5)
src = torch.ones(5)
# Scatter во втором измерении (индекс 2)
output = torch.select_scatter(input, src, dim=1, index=2)
print("Форма входных данных:", input.shape)
print("Форма источника:", src.shape)
print("Форма результата:", output.shape)
print("nРезультат (dim=1, index=2):")
print(output[0])
# Создать 3D-тензор
input = torch.zeros(3, 4, 5)
src = torch.ones(5)
# Scatter во втором измерении (индекс 2)
output = torch.select_scatter(input, src, dim=1, index=2)
print("Форма входных данных:", input.shape)
print("Форма источника:", src.shape)
print("Форма результата:", output.shape)
print("nРезультат (dim=1, index=2):")
print(output[0])
Результат вывода:
输入形状: torch.Size([3, 4, 5]) 源形状: torch.Size([5]) 结果形状: torch.Size([3, 4, 5]) 结果 (dim=1, index=2): tensor([1., 1., 1., 1., 1.])
Пример
import torch
# Использовать другие значения
input = torch.arange(16).reshape(4, 4).float()
src = torch.tensor([100, 100, 100, 100])
# Scatter в последней строке
output = torch.select_scatter(input, src, dim=0, index=-1)
print("Исходный тензор:")
print(input)
print("nScatter в позицию с индексом -1:")
print(output)
# Использовать другие значения
input = torch.arange(16).reshape(4, 4).float()
src = torch.tensor([100, 100, 100, 100])
# Scatter в последней строке
output = torch.select_scatter(input, src, dim=0, index=-1)
print("Исходный тензор:")
print(input)
print("nScatter в позицию с индексом -1:")
print(output)
Результат вывода:
原始张量:
tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[12., 13., 14., 15.]])
散布到索引-1位置:
tensor([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[100., 100., 100., 100.]])
Примечание:torch.select_scatterНе изменяет исходный входной тензор, но возвращает новый тензор.srcРазмерности должны совпадать с размерностями заменяемого среза.
Другие расширения