Función PyTorch torch.index_reduce
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
# 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
# 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
# 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
# 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.
Otras extensiones