Fonction torch.index_reduce de PyTorch


Pytorch torch 参考手册Manuel de référence Pytorch torch

torch.index_reduceest une fonction dans PyTorch utilisée pour agréger les valeurs d'un tenseur source vers des positions d'indices spécifiées d'une manière spécifiée. Elle, le long de la dimension spécifiéedim, àindexpositions d'indices spécifiées, agréger de la manière spécifiéesourceles valeurs de.

Définition de fonction

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

Parameters:

  • input(Tensor) : tenseur d'entrée.
  • dim(int) : La dimension de l'index.
  • index(Tensor) : Un tenseur entier 1D spécifiant les positions de destination de l'agrégation.
  • source(Tensor) : Le tenseur source, les valeurs à agréger.
  • reduce(str) : La méthode d'agrégation, les valeurs optionnelles sont 'mean', 'prod', 'amax', 'amin'. La valeur par défaut est 'mean'.
  • include_self(bool, facultatif) : Indique s'il faut inclure les valeurs d'origine aux positions d'index elles-mêmes dans l'agrégation. La valeur par défaut est True.

Valeur de retour:

  • torch.Tensor: Renvoie le tenseur agrégé.

Exemples d'utilisation

Exemple

import torch

# Créer le tenseur d'entrée
input = torch.randn(3, 3)

# Créer les indices et la source
index = torch.tensor([0, 0, 0])
source = torch.tensor([1.0, 2.0, 3.0])

# Utiliser l'agrégation mean
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Entrée :")
print(input)
print("nIndex:", index)
print("Source :", source)
print("nmean aggregation result:")
print(output)

Le résultat de sortie est:

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

Exemple

import torch

# Tester différentes méthodes d'agrégation
input = torch.ones(3)
index = torch.tensor([0, 0, 0])
source = torch.tensor([2.0, 4.0, 6.0])

# agrégation prod
output_prod = torch.index_reduce(input, 0, index, source, reduce='prod')
print("agrégation prod :", output_prod)

# agrégation amax
output_max = torch.index_reduce(input, 0, index, source, reduce='amax')
print("agrégation amax :", output_max)

# agrégation amin
output_min = torch.index_reduce(input, 0, index, source, reduce='amin')
print("agrégation amin :", output_min)

Le résultat de sortie est:

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

Exemple

import torch

# paramètre include_self
input = torch.tensor([1.0, 10.0, 100.0])
index = torch.tensor([0, 0])
source = torch.tensor([5.0, 5.0])

# Inclure les valeurs de self (par défaut)
output1 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=True)
print("include_self=True:", output1)

# Exclure les valeurs de self
output2 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=False)
print("include_self=False:", output2)

Le résultat de sortie est:

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

Exemple

import torch

# application de tenseur 2D
input = torch.zeros(3, 4)
index = torch.tensor([0, 2, 2])
source = torch.randn(3, 4)

# agrégation par moyenne
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Forme de l'entrée :", input.shape)
print("Index :", index)
print("Source shape:", source.shape)
print("Forme du résultat :", output.shape)
print("nRésultat :")
print(output)

Remarque :torch.index_reduceIl ne modifie pas le tenseur d'entrée d'origine, mais renvoie un nouveau tenseur. Plusieurs indices peuvent pointer vers la même position, et les valeurs seront agrégées selon la méthode d'agrégation spécifiée.include_self=FalseIl est utile dans certains scénarios, car il peut exclure les valeurs d'origine et n'agréger que les valeurs nouvellement ajoutées.


Pytorch torch 参考手册Manuel de référence Pytorch torch

Autres extensions