mindspore.Tensor.index_add_

查看源文件
mindspore.Tensor.index_add_(dim, index, source, *, alpha=1)[源代码]

根据 index 中的索引顺序,将 alpha 乘以 source 的元素累加到 self 中。例如,如果 dim == 0index[i] == j,且 alpha = -1,那么 source 的第 i 行将从 self 的第 j 行中被减去。source 的第 dim 维度必须与 index 的长度相同,且所有其他维度必须与 self 匹配,否则将引发错误。对于一个三维张量,输出定义如下:

\[\begin{split}\begin{array}{ll} self[index[i],\ :,\ :]\ +=\ alpha * source[i,\ :,\ :] \qquad \#if\ dim == 0 \\ self[:,\ \ index[i],\ :]\ +=\ alpha * source[:,\ \ i,\ :] \qquad \#if\ dim == 1 \\ self[:,\ :,\ \ index[i]]\ +=\ alpha * source[:,\ :,\ \ i] \qquad\#if\ dim == 2 \\ \end{array}\end{split}\]

警告

这是一个实验性API,后续可能修改或删除。

参数:
  • dim (int) - 指定 index 属于哪个维度。

  • index (Tensor) - 指定 selfsource 在轴 dim 的指定下标位置相加,数据类型为 int32。要求 index shape的维度为一维,并且 index shape的大小与 source shape在 dim 轴上的大小一致。 index 中元素取值范围为[0, b),其中b的值为 self shape在 dim 轴上的大小。

  • source (Tensor) - 输入的要进行相加的Tensor,一定要与 self 有相同的数据类型,与 selfdim 维度有相同的shape。

关键字参数:
  • alpha (number,可选) - source 的乘数。默认值: 1

返回:

相加后的Tensor。shape和数据类型与输入 self 相同。

异常:
  • TypeError - index 或者 source 的类型不是Tensor。

  • ValueError - dim 的值超出 source shape的维度范围。

  • ValueError - index shape的维度和 source shape的维度不一致。

  • ValueError - index shape的维度不是1D或者 index shape的大小与 source shape在 dim 轴上的大小不一致。

  • ValueError - 除 dim 轴外, self shape和 source shape的大小不一致。

支持平台:

Ascend

样例:

>>> import numpy as np
>>> import mindspore
>>> from mindspore import Tensor
>>> x = Tensor(np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]), mindspore.float32)
>>> index = Tensor(np.array([0, 2]), mindspore.int32)
>>> y = Tensor(np.array([[0.5, 1.0], [1.0, 1.5], [2.0, 2.5]]), mindspore.float32)
>>> output = x.index_add_(1, index, y, 1)
>>> print(output)
[[ 1.5  2.   4. ]
 [ 5.   5.   7.5]
 [ 9.   8.  11.5]]
>>> print(x)
[[ 1.5  2.   4. ]
 [ 5.   5.   7.5]
 [ 9.   8.  11.5]]