oneflow.Tensor.index_add_

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

The interface is consistent with PyTorch.

Accumulate the elements of alpha times source into the self tensor by adding to the indices in the order given in index. For example, if dim == 0, index[i] == j, and alpha=-1, then the ith row of source is subtracted from the jth row of self.

The dimth dimension of source must have the same size as the length of index (which must be a vector), and all other dimensions must match self, or an error will be raised.

For a 3-D tensor the output is given as:

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
Parameters
  • dim (int) – dimension along which to index

  • index (Tensor) – indices of source to select from, should have dtype either oneflow.int64 or oneflow.int32

  • source (Tensor) – the tensor containing values to add

Keyword Arguments

alpha (Number) – the scalar multiplier for source

>>> import oneflow as flow
>>> x = flow.ones(5, 3)
>>> t = flow.tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]], dtype=flow.float)
>>> index = flow.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.]], dtype=oneflow.float32)
>>> x.index_add_(0, index, t, alpha=-1)
tensor([[1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.],
        [1., 1., 1.]], dtype=oneflow.float32)