PyTorch torch.diagonal_scatter Funktion
PyTorch torch Referenzhandbuch
torch.diagonal_scatterist eine Funktion in PyTorch, die verwendet wird, um Werte in die diagonalen Positionen eines Tensors zu streuen. Siesrcstreut die Werte voninputauf die angegebene Diagonale von.
Funktionsdefinition
torch.diagonal_scatter(input, src, offset=0, dim1=0, dim2=1)
Parameters:
input(Tensor): Der Eingabetensor, d. h. der Tensor, der geändert werden soll.src(Tensor): Der Quelltensor, die Werte, die in die diagonalen Positionen gestreut werden.offset(int, optional): Der Diagonalversatz. Ein positiver Wert gibt eine Superdiagonale an, ein negativer Wert gibt eine Subdiagonale an, und 0 gibt die Hauptdiagonale an.dim1(int, optional): Die erste Dimension, standardmäßig 0.dim2(int, optional): Die zweite Dimension, standardmäßig 1.
Rückgabewert:
torch.Tensor: Gibt den geänderten Tensor zurück.
Anwendungsbeispiele
Beispiel
import torch
# Eingabe-Tensor erstellen
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Die Werte in die Hauptdiagonale streuen
output = torch.diagonal_scatter(input, src)
print("Eingabe-Tensor:")
print(input)
print("nQuell-Tensor:")
print(src)
print("nIn die Hauptdiagonale streuen:")
print(output)
# Eingabe-Tensor erstellen
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3, 4])
# Die Werte in die Hauptdiagonale streuen
output = torch.diagonal_scatter(input, src)
print("Eingabe-Tensor:")
print(input)
print("nQuell-Tensor:")
print(src)
print("nIn die Hauptdiagonale streuen:")
print(output)
Das Ausgabeergebnis ist:
输入张量:
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.]])
Beispiel
import torch
# Eingabe-Tensor erstellen
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Die Werte in die Superdiagonale (offset=1) streuen
output = torch.diagonal_scatter(input, src, offset=1)
print("In die Superdiagonale streuen (offset=1):")
print(output)
# Die Werte in die Subdiagonale (offset=-1) streuen
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nStreuen auf die Subdiagonale (offset=-1):")
print(output2)
# Eingabe-Tensor erstellen
input = torch.zeros(4, 4)
src = torch.tensor([1, 2, 3])
# Die Werte in die Superdiagonale (offset=1) streuen
output = torch.diagonal_scatter(input, src, offset=1)
print("In die Superdiagonale streuen (offset=1):")
print(output)
# Die Werte in die Subdiagonale (offset=-1) streuen
output2 = torch.diagonal_scatter(input, src, offset=-1)
print("nStreuen auf die Subdiagonale (offset=-1):")
print(output2)
Das Ausgabeergebnis ist:
散布到上对角线 (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.]])
Beispiel
import torch
# Diagonalen in einem 3D-Tensor verwenden
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Streuen auf den beiden angegebenen Dimensionen
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Eingabeform:", input.shape)
print("Quellform:", src.shape)
print("Ergebnisform:", output.shape)
# Ersten Batch anzeigen
print("nErgebnis vom ersten Batch:")
print(output[0])
# Diagonalen in einem 3D-Tensor verwenden
input = torch.zeros(3, 4, 4)
src = torch.tensor([10, 20, 30])
# Streuen auf den beiden angegebenen Dimensionen
output = torch.diagonal_scatter(input, src, dim1=1, dim2=2)
print("Eingabeform:", input.shape)
print("Quellform:", src.shape)
print("Ergebnisform:", output.shape)
# Ersten Batch anzeigen
print("nErgebnis vom ersten Batch:")
print(output[0])
Das Ausgabeergebnis ist:
输入形状: 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.]])
Hinweis:torch.diagonal_scatterEs verändert den ursprünglichen Eingabe-Tensor nicht, sondern gibt einen neuen Tensor zurück.srcDie Größe von muss mit der Anzahl der Diagonalelemente übereinstimmen.
Andere Erweiterungen