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


Pytorch torch 参考手册Справочное руководство 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)

Результат вывода:

输入张量:
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)

Результат вывода:

散布到上对角线 (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])

Результат вывода:

输入形状: 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Размер должен совпадать с количеством диагональных элементов.


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

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