Fonction torch.diagonal_scatter de PyTorch
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)
# 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)
# 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])
# 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.
Autres extensions