Spec-Zone.ru › PyTorch 2

torch.Tensor.index_add_

Tensor.index_add_(dim, index, source, *, alpha=1) → Tensor

Накапливает элементы alpha умноженные на source в тензор self, добавляя по индексам в порядке, заданном в index. Например, если dim == 0, index[i] == j, и alpha=-1, то i-я строка тензора source вычитается из j-й строки тензора self.

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

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

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

Примечание

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

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

alpha (Число) – скалярный множитель для source

Пример:

>>> x = torch.ones(5, 3)
>>> t = torch.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=torch.float)
>>> index = torch.tensor([0, 4, 2])
>>> x.index_add_(0, index, t)
tensor([[  2.,   3.,   4.],
        [  1.,   1.,   1.],
        [  8.,   9.,  10.],
        [  1.,   1.,   1.],
        [  5.,   6.,   7.]])
>>> x.index_add_(0, index, t, alpha=-1)
tensor([[  1.,   1.,   1.],
        [  1.,   1.,   1.],
        [  1.,   1.,   1.],
        [  1.,   1.,   1.],
        [  1.,   1.,   1.]])

© 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_add_.html

Spec-Zone.ru

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