Función PyTorch torch.scatter_reduce


Pytorch torch 参考手册Manual de referencia de Pytorch torch

torch.scatter_reduceEs una función de PyTorch que se utiliza para agregar los valores de un tensor fuente a posiciones especificadas de la manera indicada. Admite múltiples modos de agregación, como suma, producto, máximo, mínimo, etc.

Definición de la función

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

Parámetros:

  • input(Tensor): el tensor de entrada.
  • dim(int): la dimensión de agregación.
  • index(Tensor): el tensor de índices, que especifica en qué posiciones de input se deben agregar los valores de src.
  • src(Tensor): el tensor fuente, los valores a agregar.
  • reduce(str): el modo de agregación, los valores opcionales son 'sum', 'prod', 'mean', 'amax', 'amin', 'multiply'. El valor predeterminado es 'sum'.
  • include_self(bool, opcional): si se incluye el valor original de la propia posición del índice en la agregación. El valor predeterminado es True.

Valor de retorno:

  • torch.Tensor: Devuelve el tensor resultante de la agregación.

Ejemplo de uso

Ejemplo

import torch

# Crear el tensor de entrada
input = torch.ones(3, 5)

# Crear los índices y la fuente
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]])

# Usar agregación con sum
output = torch.scatter_reduce(input, dim=0, index=index, src=src, reduce='sum')

print(Entrada:)
print(input)
print(nModo de agregación: sum)
print(Resultado:)
print(output)

El resultado de salida es:

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

Ejemplo

import torch

# Probar diferentes modos de agregación
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]])

# Usar prod (producto)
output_prod = torch.scatter_reduce(input, 0, index, src, reduce='prod')
print(Agregación con prod:)
print(output_prod)

# Usar amax (máximo)
output_max = torch.scatter_reduce(input, 0, index, src, reduce='amax')
print(nAgregación con amax:)
print(output_max)

# Usar amin (mínimo)
output_min = torch.scatter_reduce(input, 0, index, src, reduce='amin')
print(nAgregación con amin:)
print(output_min)

El resultado de salida es:

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.]])

Ejemplo

import torch

# Usar el parámetro 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])

# Incluir el valor propio (por defecto)
output1 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=True)
print("include_self=True:", output1)

# No incluir el valor propio
output2 = torch.scatter_reduce(input, 0, index, src, reduce='sum', include_self=False)
print("include_self=False:", output2)

El resultado de salida es:

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

Nota:torch.scatter_reduceNo modifica el tensor de entrada original, sino que devuelve un nuevo tensor. Varios índices pueden apuntar a la misma posición, y los valores se agregarán según el modo de agregación especificado.include_self=FalseEs muy útil en ciertos escenarios, como en redes neuronales de grafos para evitar recalcular repetidamente las características del propio nodo.


Pytorch torch 参考手册Manual de referencia de Pytorch torch

Otras extensiones