Spec-Zone.ru › PyTorch 2

torch.Tensor.index_reduce_

Tensor.index_reduce_(dim, index, source, reduce, *, include_self=True) → Tensor

Накопление элементов source в тензор self путём накопления по индексам, указанным в порядке index, используя операцию сокращения, заданную аргументом reduce. Например, если dim == 0, index[i] == j, reduce == prod и include_self == True, тогда i строка source умножается на j строку self. Если include_self="True", значения в тензоре self включаются в операцию сокращения, в противном случае, строки в тензоре self , к которым производится накопление, обрабатываются так, как будто они заполнены значениями по умолчанию для операции сокращения.

Размерность source по размерности dim должна совпадать с длиной index (которая должна быть вектором), а все остальные размерности должны совпадать с self, в противном случае произойдёт ошибка.

Для 3-мерного тензора с reduce="prod" и include_self=True вывод выглядит следующим образом:

self[index[i], :, :] *= src[i, :, :]  # if dim == 0
self[:, index[i], :] *= src[:, i, :]  # if dim == 1
self[:, :, index[i]] *= src[:, :, i]  # if dim == 2

Примечание

Данная операция может иметь недетерминированное поведение при использовании тензоров на устройстве CUDA. Подробнее см. Воспроизводимость.

Примечание

Эта функция поддерживает только тензоры с плавающей точкой.

Предупреждение

Эта функция находится в стадии бета-тестирования и может быть изменена в ближайшем будущем.

Параметры
  • dim (int) – размерность, по которой выполняется индексирование
  • index (Tensor) – индексы source для выбора, должен иметь тип torch.int64 или torch.int32
  • source (FloatTensor) – тензор, содержащий значения для накопления
  • reduce (str) – операция сокращения для применения ("prod", "mean", "amax", "amin")
Ключевые аргументы

include_self (bool) – включать ли элементы из тензора self в операцию сокращения

Пример:

>>> x = torch.empty(5, 3).fill_(2)
>>> t = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], dtype=torch.float)
>>> index = torch.tensor([0, 4, 2, 0])
>>> x.index_reduce_(0, index, t, 'prod')
tensor([[20., 44., 72.],
        [ 2.,  2.,  2.],
        [14., 16., 18.],
        [ 2.,  2.,  2.],
        [ 8., 10., 12.]])
>>> x = torch.empty(5, 3).fill_(2)
>>> x.index_reduce_(0, index, t, 'prod', include_self=False)
tensor([[10., 22., 36.],
        [ 2.,  2.,  2.],
        [ 7.,  8.,  9.],
        [ 2.,  2.,  2.],
        [ 4.,  5.,  6.]])

© 2024, PyTorch Contributors
PyTorch has a BSD-style license, as found in the LICENSE file.
https://pytorch.org/docs/2.1/generated/torch.Tensor.index_reduce_.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API