Fonction torch.diagonal_scatter de PyTorch


Pytorch torch 参考手册Manuel de référence Pytorch torch

torch.diagonal_scatterest une fonction de PyTorch utilisée pour disperser des valeurs dans les positions diagonales d'un tenseur. Ellesrcdisperse les valeurs deinputsur la diagonale spécifiée de.

Définition de fonction

torch.diagonal_scatter(input, src, offset=0, dim1=0, dim2=1)

Parameters:

  • input(Tensor) : Le tenseur d'entrée, c'est-à-dire le tenseur à modifier.
  • src(Tensor) : Le tenseur source, les valeurs à disperser dans les positions diagonales.
  • offset(int, facultatif) : Le décalage diagonal. Une valeur positive indique une superdiagonale, une valeur négative indique une sous-diagonale, et 0 indique la diagonale principale.
  • dim1(int, facultatif) : La première dimension, valeur par défaut 0.
  • dim2(int, facultatif) : La deuxième dimension, valeur par défaut 1.

Valeur de retour:

  • torch.Tensor: Renvoie le tenseur modifié.

Exemples d'utilisation

Exemple

import torch

# Créer le tenseur d'entrée
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])

# Répartir les valeurs dans la diagonale principale
output = torch.diagonal_scatter(input, src)

print("Tenseur d'entrée :")
print(input)
print("nTenseur source :")
print(src)
print("nRépartir dans la diagonale principale :")
print(output)

Le résultat de sortie est:

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

Exemple

import torch

# Créer le tenseur d'entrée
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])

# Répartir les valeurs dans la superdiagonale (offset=1)
output = torch.diagonal_scatter(input, src, offset=1)

print("Répartir dans la superdiagonale (offset=1) :")
print(output)

# Répartir les valeurs dans la sous-diagonale (offset=-1)
output2 = torch.diagonal_scatter(input, src, offset=-1)

print("nDiffuser vers la sous-diagonale (offset=-1) :")
print(output2)

Le résultat de sortie est:

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

Exemple

import torch

# Utilisation des diagonales dans un tenseur 3D
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])

# Diffuser sur les deux dimensions spécifiées
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)

print("Forme de l'entrée :", input.shape)
print("Forme de la source :", src.shape)
print("Forme du résultat :", output.shape)

# Afficher le premier lot
print("nRésultat du premier lot :")
print(output[0])

Le résultat de sortie est:

输入形状: 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.]])

Remarque :torch.diagonal_scatterIl ne modifie pas le tenseur d’entrée d’origine, mais renvoie un nouveau tenseur.srcLa taille de doit correspondre au nombre d’éléments diagonaux.


Pytorch torch 参考手册Manuel de référence Pytorch torch

Autres extensions