Функция torch.index_reduce в PyTorch
Справочное руководство 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: Возвращает агрегированный тензор.
Примеры использования
Пример
# Создание входного тензора
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]])
Пример
# Проверить различные методы агрегации
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.])
Пример
# параметр 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.])
Пример
# Применение к 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Это полезно в некоторых сценариях, поскольку позволяет исключить исходные значения и агрегировать только вновь добавленные значения.
Другие расширения