Функция torch.diagonal_scatter в PyTorch
Справочное руководство Pytorch torch
torch.diagonal_scatterявляется функцией в PyTorch, используемой для размещения значений в диагональных позициях тензора. Онаsrcразмещает значенияinputна указанную диагональ.
Определение функции
torch.diagonal_scatter(input, src, offset=0, dim1=0, dim2=1)
Parameters:
input(Tensor): Входной тензор, т. е. тензор, который нужно изменить.src(Tensor): Исходный тензор, значения, которые нужно разместить в диагональных позициях.offset(int, optional): Смещение диагонали. Положительное значение обозначает наддиагональ, отрицательное — поддиагональ, а 0 — главную диагональ.dim1(int, optional): Первая размерность, по умолчанию равна 0.dim2(int, optional): Вторая размерность, по умолчанию равна 1.
Возвращаемое значение:
torch.Tensor: Возвращает изменённый тензор.
Примеры использования
Пример
import torch
# Создание входного тензора
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Разместить значения по главной диагонали
output = torch.diagonal_scatter(input, src)
print("Входной тензор:")
print(input)
print("nТензор-источник:")
print(src)
print("nРазмещение по главной диагонали:")
print(output)
# Создание входного тензора
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Разместить значения по главной диагонали
output = torch.diagonal_scatter(input, src)
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.]])
源张量:
tensor([1, 2, 3, 4])
散布到主对角线:
tensor([[1., 0., 0., 0.],
[0., 2., 0., 0.],
[0., 0., 3., 0.],
[0., 0., 0., 4.]])
Пример
import torch
# Создание входного тензора
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Разместить значения по наддиагонали (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("Размещение по наддиагонали (offset=1):")
print(output)
# Разместить значения по поддиагонали (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nРазброс по поддиагонали (offset=-1):")
print(output2)
# Создание входного тензора
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Разместить значения по наддиагонали (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)
print("Размещение по наддиагонали (offset=1):")
print(output)
# Разместить значения по поддиагонали (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nРазброс по поддиагонали (offset=-1):")
print(output2)
Результат вывода:
散布到上对角线 (offset=1):
tensor([[0., 1., 0., 0.],
[0., 0., 2., 0.],
[0., 0., 0., 3.],
[0., 0., 0., 0.]])
散布到下对角线 (offset=-1):
tensor([[0., 0., 0., 0.],
[1., 0., 0., 0.],
[0., 2., 0., 0.],
[0., 0., 3., 0.]])
Пример
import torch
# Использование диагоналей в 3D-тензоре
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Разброс по указанным двум измерениям
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Форма входных данных:", input.shape)
print("Форма источника:", src.shape)
print("Форма результата:", output.shape)
# Просмотр первого батча
print("nРезультат первого батча:")
print(output[0])
# Использование диагоналей в 3D-тензоре
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Разброс по указанным двум измерениям
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Форма входных данных:", input.shape)
print("Форма источника:", src.shape)
print("Форма результата:", output.shape)
# Просмотр первого батча
print("nРезультат первого батча:")
print(output[0])
Результат вывода:
输入形状: torch.Size([3, 4, 4])
源形状: torch.Size([3])
结果形状: torch.Size([3, 4, 4])
第一个batch的结果:
tensor([[10., 0., 0., 0.],
[0., 20., 0., 0.],
[0., 0., 30., 0.],
[0., 0., 0., 0.]])
Примечание:torch.diagonal_scatterОн не изменяет исходный входной тензор, а возвращает новый тензор.srcРазмер должен совпадать с количеством диагональных элементов.
Другие расширения