PyTorch torch.scatter_add-Funktion


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

torch.scatter_addist eine Funktion in PyTorch, die verwendet wird, um die Werte des Quelltensors zu den angegebenen Positionen zu addieren. Sie wirdsrcdie Werte gemäßindexdie angegebenen Positionen, zu denen hinzugefügt werden sollinputin.

Funktionsdefinition

torch.scatter_add(input, dim, index, src)

Parameters:

  • input(Tensor): Eingabe-Tensor.
  • dim(int): Die Dimension, entlang der gestreut wird.
  • index(Tensor): Index-Tensor, der angibt, wo die Werte von src zu input addiert werden.
  • src(Tensor): Quelltensor, die zu addierenden Werte.

Rückgabewert:

  • torch.Tensor: Gibt den geänderten Tensor zurück.

Anwendungsbeispiel

Beispiel

import torch

# Eingabe-Tensor erstellen
input = torch.zeros(3, 5)

# Index und source erstellen
index = torch.tensor([[0, 1, 2, 0, 0],
                      [1, 2, 0, 1, 2],
                      [2, 0, 1, 2, 0]])
src = torch.tensor([[1, 1, 1, 1, 1],
                    [2, 2, 2, 2, 2],
                    [3, 3, 3, 3, 3]])

# Streuen und akkumulieren entlang dim=0
output = torch.scatter_add(input, dim=0, index=index, src=src)

print("Eingabe:")
print(input)
print("nIndex:")
print(index)
print("nSource:")
print(src)
print("nErgebnis:")
print(output)

Das Ausgabeergebnis ist:

输入:
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])

索引:
tensor([[0, 1, 2, 0, 0],
        [1, 2, 0, 1, 2],
        [2, 0, 1, 2, 0]])

源:
tensor([[1., 1., 1., 1., 1.],
        [2., 2., 2., 2., 2.],
        [3., 3., 3., 3., 3.]])

结果:
tensor([[4., 1., 2., 4., 4.],
        [2., 1., 2., 2., 2.],
        [3., 3., 1., 3., 3.]])

Beispiel

import torch

# dim=1 verwenden
input = torch.zeros(3, 5)
index = torch.tensor([[0, 1, 2, 1, 0],
                      [1, 2, 0, 2, 1],
                      [0, 1, 1, 0, 2]])
src = torch.arange(1, 6).float()

output = torch.scatter_add(input, dim=1, index=index, src=src)

print("Scatter entlang dim=1:")
print(output)

Das Ausgabeergebnis ist:

沿 dim=1 散布:
tensor([[ 6.,  3.,  3.,  0.,  0.],
        [ 3.,  6.,  3.,  0.,  0.],
        [ 2.,  4.,  5.,  0.,  0.]])

Beispiel

import torch

# Anwendungsszenario zum Aggregieren von Werten aus mehreren Positionen
# Zum Beispiel das Akkumulieren von Merkmalen benachbarter Knoten in Graph-Neuronalen Netzen

# Simuliere initiale Merkmale von 4 Knoten
node_features = torch.zeros(4, 3)

# Simuliere Kantenverbindungen (Quellknoten zeigen auf Zielknoten)
edge_index = torch.tensor([0, 1, 2, 3, 0, 1])  # Quellknoten der Kanten
edge_weights = torch.tensor([1.0, 2.0, 3.0, 1.5, 2.5, 0.5])

# Gewichtete Werte der Quellknotenmerkmale für jede Kante erstellen
src_features = torch.randn(6, 3) * edge_weights.unsqueeze(1)

# Die Merkmale zu den Zielknoten akkumulieren (hier vereinfacht; in der Praxis sollte es auf den Zielknoten der Kanten basieren)
target_nodes = torch.tensor([0, 0, 1, 1, 2, 3])
index = target_nodes

output = torch.scatter_add(node_features, 0, index.unsqueeze(1).expand_as(src_features), src_features)

print("Form der Knotenmerkmale:", node_features.shape)
print("Akkumulierte Merkmale:", output)

Hinweis:torch.scatter_addändert den ursprünglichen Eingabe-Tensor nicht, sondern gibt einen neuen Tensor zurück. Mehrere Indizes können auf dieselbe Position zeigen, und die Werte werden akkumuliert. Diese Funktion isttorch.gatherdie inverse Operation von.


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

Andere Erweiterungen