mindspore.Tensor.index_add_
- mindspore.Tensor.index_add_(dim, index, source, *, alpha=1)[源代码]
根据 index 中的索引顺序,将 alpha 乘以 source 的元素累加到 self 中。例如,如果
dim == 0
,index[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) - 指定 self 和 source 在轴 dim 的指定下标位置相加,数据类型为 int32。要求 index shape的维度为一维,并且 index shape的大小与 source shape在 dim 轴上的大小一致。 index 中元素取值范围为[0, b),其中b的值为 self shape在 dim 轴上的大小。
source (Tensor) - 输入的要进行相加的Tensor,一定要与 self 有相同的数据类型,与 self 在 dim 维度有相同的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]]