Función PyTorch torch.index_reduce


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

torch.index_reduceEs una función de PyTorch que se utiliza para agregar los valores de un tensor fuente a las posiciones de índice especificadas de acuerdo con el método especificado. A lo largo de la dimensión especificadadim, enindexlas posiciones de índice especificadas agrega de la manera especificadasourcelos valores de.

Definición de la función

torch.index_reduce(input, dim, index, source, reduce='mean', *, include_self=True)

Parámetros:

  • input(Tensor): El tensor de entrada.
  • dim(int): La dimensión de los índices.
  • index(Tensor): Tensor unidimensional de enteros que especifica las posiciones donde se agregará.
  • source(Tensor): El tensor fuente, los valores a agregar.
  • reduce(str): Método de agregación, los valores opcionales son 'mean', 'prod', 'amax', 'amin'. El valor predeterminado es 'mean'.
  • include_self(bool, opcional): Si incluir el valor original en la posición del índice durante la agregación. El valor predeterminado es True.

Valor de retorno:

  • torch.Tensor: Devuelve el tensor agregado.

Ejemplo de uso

Ejemplo

import torch

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

# Crear el índice y la fuente
index = torch.tensor([0, 0, 0])
source = torch.tensor([1.0, 2.0, 3.0])

# Usar agregación mean
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Entrada:")
print(input)
print("nÍndice:", index)
print("Fuente:", source)
print("nResultado de agregación mean:")
print(output)

El resultado de salida es:

输入:
tensor([[ 0.3456, -0.1234,  0.5678],
        [-0.5678,  0.1234, -0.6789],
        [ 0.7890, -0.3456,  0.1234]])

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

mean 聚合结果:
tensor([[ 2.5237,  0.2931,  0.3374],
        [-0.5678,  0.1234, -0.6789],
        [ 0.7890, -0.3456,  0.1234]])

Ejemplo

import torch

# Probar diferentes métodos de agregación
input = torch.ones(3)
index = torch.tensor([0, 0, 0])
source = torch.tensor([2.0, 4.0, 6.0])

# Agregación prod
output_prod = torch.index_reduce(input, 0, index, source, reduce='prod')
print("Agregación prod:", output_prod)

# Agregación amax
output_max = torch.index_reduce(input, 0, index, source, reduce='amax')
print("Agregación amax:", output_max)

# Agregación amin
output_min = torch.index_reduce(input, 0, index, source, reduce='amin')
print("Agregación amin:", output_min)

El resultado de salida es:

prod 聚合: tensor([48.,  1.,  1.])
amax 聚合: tensor([7., 1., 1.])
amin 聚合: tensor([3., 1., 1.])

Ejemplo

import torch

# Parámetro include_self
input = torch.tensor([1.0, 10.0, 100.0])
index = torch.tensor([0, 0])
source = torch.tensor([5.0, 5.0])

# Incluir el valor propio (predeterminado)
output1 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=True)
print("include_self=True:", output1)

# No incluir el valor propio
output2 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=False)
print("include_self=False:", output2)

El resultado de salida es:

include_self=True: tensor([ 3.6667, 10.0000, 100.0000])
include_self=False: tensor([ 5., 10., 100.])

Ejemplo

import torch

# Aplicación con tensor 2D
input = torch.zeros(3, 4)
index = torch.tensor([0, 2, 2])
source = torch.randn(3, 4)

# Agregación mean
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Forma de entrada:", input.shape)
print("Índice:", index)
print("Forma de la fuente:", source.shape)
print("Forma del resultado:", output.shape)
print("nResultado:")
print(output)

Nota:torch.index_reduceNo modifica el tensor de entrada original, sino que devuelve un tensor nuevo. Varios índices pueden apuntar a la misma posición, y los valores se agregarán según el método de agregación especificado.include_self=FalseEs útil en ciertos escenarios, ya que puede excluir el valor original y agregar solo los valores recién añadidos.


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

Otras extensiones