PyTorch torch.scatter_reduce Funktion


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

torch.scatter_reduceEs ist eine Funktion in PyTorch, die verwendet wird, um die Werte eines Quell-Tensors auf angegebene Positionen auf eine bestimmte Weise zu aggregieren. Sie unterstützt mehrere Aggregationsmethoden, wie z. B. sum, product, max, min, usw.

Funktionsdefinition

torch.scatter_reduce(input, dim, index, src, reduce='sum', *, include_self=True)

Parameters:

  • input(Tensor): Der Eingabe-Tensor.
  • dim(int): Die Dimension, entlang der aggregiert wird.
  • index(Tensor): Der Index-Tensor, der angibt, wo die Werte von src in input aggregiert werden.
  • src(Tensor): Der Quell-Tensor, die zu aggregierenden Werte.
  • reduce(str): Die Aggregationsmethode. Optionen sind 'sum', 'prod', 'mean', 'amax', 'amin', 'multiply'. Standard ist 'sum'.
  • include_self(bool, optional): Ob der ursprüngliche Wert an der Indexposition selbst in die Aggregation einbezogen werden soll. Standard ist True.

Rückgabewert:

  • torch.Tensor: Gibt den aggregierten Tensor zurück.

Anwendungsbeispiele

Beispiel

import torch

# Eingabe-Tensor erstellen
input = torch.ones(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]])

# Summenaggregation verwenden
output = torch.scatter_reduce(input, dim=0, index=index, src=src, reduce='sum')

print("Eingabe:")
print(input)
print("nAggregationsmethode: sum")
print("Ergebnis:")
print(output)

Das Ausgabeergebnis ist:

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

聚合方式: sum
结果:
tensor([[4., 2., 3., 4., 4.],
        [2., 2., 2., 2., 2.],
        [3., 3., 2., 3., 3.]])

Beispiel

import torch

# Verschiedene Aggregationsmethoden testen
input = torch.zeros(3, 3)
index = torch.tensor([[0, 0, 0],
                      [1, 1, 1],
                      [2, 2, 2]])
src = torch.tensor([[2, 3, 4],
                    [5, 6, 7],
                    [8, 9, 10]])

# prod (Produkt) verwenden
output_prod = torch.scatter_reduce(input, 0, index, src, reduce='prod')
print("prod-Aggregation:")
print(output_prod)

# amax (Maximum) verwenden
output_max = torch.scatter_reduce(input, 0, index, src, reduce='amax')
print("namax-Aggregation:")
print(output_max)

# amin (Minimum) verwenden
output_min = torch.scatter_reduce(input, 0, index, src, reduce='amin')
print("namin-Aggregation:")
print(output_min)

Das Ausgabeergebnis ist:

prod 聚合:
tensor([[ 2.,  3.,  4.],
        [ 5.,  6.,  7.],
        [ 8.,  9., 10.]])

amax 聚合:
tensor([[ 2.,  3.,  4.],
        [ 5.,  6.,  7.],
        [ 8.,  9., 10.]])

amin 聚合:
tensor([[ 2.,  3.,  4.],
        [ 5.,  6.,  7.],
        [ 8.,  9., 10.]])

Beispiel

import torch

# Verwenden Sie den Parameter include_self
input = torch.tensor([1.0, 2.0, 3.0])
index = torch.tensor([0, 0, 0])
src = torch.tensor([10.0, 20.0, 30.0])

# Eigenen Wert einbeziehen (Standard)
output1 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=True)
print("include_self=True:", output1)

# Eigenen Wert ausschließen
output2 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=False)
print("include_self=False:", output2)

Das Ausgabeergebnis ist:

include_self=True: tensor([66.,  2.,  3.])
include_self=False: tensor([60.,  2.,  3.])

Hinweis:torch.scatter_reduceEs ä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 gemäß der angegebenen Aggregationsmethode aggregiert.include_self=FalseEs ist in einigen Szenarien nützlich, beispielsweise um die wiederholte Berechnung der eigenen Merkmale eines Knotens in Graph-Neuronalen Netzen zu vermeiden.


Pytorch torch 参考手册PyTorch torch-Referenzhandbuch

Andere Erweiterungen