Функция torch.index_reduce в PyTorch


Pytorch torch 参考手册Справочное руководство Pytorch torch

torch.index_reduceявляется функцией в PyTorch, используемой для агрегирования значений исходного тензора в указанные позиции индекса заданным образом. Она, вдоль указанного измеренияdim, поindexуказанные позиции индекса, агрегировать заданным образомsourceзначения из.

Определение функции

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

Parameters:

  • input(Tensor): входной тензор.
  • dim(int): Размерность индекса.
  • index(Tensor): Одномерный целочисленный тензор, задающий позиции, к которым нужно агрегировать.
  • source(Tensor): Исходный тензор, значения для агрегации.
  • reduce(str): Метод агрегации, допустимые значения: 'mean', 'prod', 'amax', 'amin'. По умолчанию — 'mean'.
  • include_self(bool, optional): Включать ли в агрегацию исходные значения в самих позициях индекса. По умолчанию — True.

Возвращаемое значение:

  • torch.Tensor: Возвращает агрегированный тензор.

Примеры использования

Пример

import torch

# Создание входного тензора
input = torch.randn(3, 3)

# Создать индексы и источник
index = torch.tensor([0, 0, 0])
source = torch.tensor([1.0, 2.0, 3.0])

# Использовать агрегацию mean
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Вход:")
print(input)
print("nIndex:", index)
print("Источник:", source)
print("nmean aggregation result:")
print(output)

Результат вывода:

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

Пример

import torch

# Проверить различные методы агрегации
input = torch.ones(3)
index = torch.tensor([0, 0, 0])
source = torch.tensor([2.0, 4.0, 6.0])

# агрегация prod
output_prod = torch.index_reduce(input, 0, index, source, reduce='prod')
print("агрегация prod:", output_prod)

# агрегация amax
output_max = torch.index_reduce(input, 0, index, source, reduce='amax')
print("агрегация amax:", output_max)

# агрегация amin
output_min = torch.index_reduce(input, 0, index, source, reduce='amin')
print("агрегация amin:", output_min)

Результат вывода:

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

Пример

import torch

# параметр include_self
input = torch.tensor([1.0, 10.0, 100.0])
index = torch.tensor([0, 0])
source = torch.tensor([5.0, 5.0])

# Включать собственные значения (по умолчанию)
output1 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=True)
print("include_self=True:", output1)

# Исключить собственные значения
output2 = torch.index_reduce(input, 0, index, source, reduce='mean', include_self=False)
print("include_self=False:", output2)

Результат вывода:

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

Пример

import torch

# Применение к 2D-тензору
input = torch.zeros(3, 4)
index = torch.tensor([0, 2, 2])
source = torch.randn(3, 4)

# агрегация среднего
output = torch.index_reduce(input, dim=0, index=index, source=source, reduce='mean')

print("Форма входных данных:", input.shape)
print("Индекс:", index)
print("Форма source:", source.shape)
print("Форма результата:", output.shape)
print("nРезультат:")
print(output)

Примечание:torch.index_reduceОн не изменяет исходный входной тензор, а возвращает новый тензор. Несколько индексов могут указывать на одну и ту же позицию, и значения будут агрегированы в соответствии с указанным методом агрегации.include_self=FalseЭто полезно в некоторых сценариях, поскольку позволяет исключить исходные значения и агрегировать только вновь добавленные значения.


Pytorch torch 参考手册Справочное руководство Pytorch torch

Другие расширения