mindspore.ops.IndexPut

class mindspore.ops.IndexPut(accumulate=0)[源代码]

根据 indices 中的下标值,使用 x2 中的数值替换 x1 中的相应元素的值。

参数:
  • accumulate (int) - 如果 accumulate 被设置为1 , x2 中的元素被累加到 x1 的相应元素上; 如果为 0,用 x2 中的元素取代 x2 的相应元素。默认值: 0。

输入:
  • x1 (Tensor) - 被执行替换操作的Tensor, 维度大于等于1。

  • x2 (Tensor) - 数据类型和 x1 一致的一维的Tensor。如果其size为1,则shape将被广播为 x1 的shape。

  • indices (tuple[Tensor], list[Tensor]) - 元素类型是int32或者int64, 用于对 x1 中的元素进行索引。 indices 中的tensor的秩应为1-D, indices 中tensor的size应小于 x1 的秩,indices中的tensor应是可广播的。

输出:

Tensor, 其数据类型和shape与 x1 相同。

异常:
  • TypeError - 如果 x1 的dtype与 x2 的dtype不同。

  • TypeError - 如果 indices 不是tuple[Tensor]或者list[Tensor]。

  • TypeError - 如果 indices 中的tensor的dtype不是int32或者int64。

  • TypeError - 如果 indices 中的tensor的dtype是不一致的。

  • TypeError - 如果 accumulate 的dtype不是int。

  • ValueError - 如果 x2 的秩不是1-D。

  • ValueError - 当 x1 的rank与 indices 的size相等时,如果 x2 的size不为1 或者不为 indices 中Tensor的最大size。

  • ValueError - 当 x1 的rank大于 indices 的size时,如果 x2 的size不为1 或者不为 x1 的最后一维的shape。

  • ValueError - 如果 indices 中的tensor的秩不是1-D。

  • ValueError - 如果 indices 中的tensor不是可广播的。

  • ValueError - 如果 indices 的size大于 x1 的秩。

  • ValueError - 如果 accumulate 的值不是0或1。

支持平台:

Ascend CPU

样例:

>>> x1 = Tensor(np.array([[1, 2, 3], [4, 5, 6]]).astype(np.int32))
>>> x2 = Tensor(np.array([3]).astype(np.int32))
>>> indices = [Tensor(np.array([0, 0]).astype(np.int32)), Tensor(np.array([0, 1]).astype(np.int32))]
>>> accumulate = 1
>>> op = ops.IndexPut(accumulate = accumulate)
>>> output = op(x1, x2, indices)
>>> print(output)
 [[4 5 3]
 [4 5 6]]