mindspore.ops.tensor_scatter_elements
- mindspore.ops.tensor_scatter_elements(input_x, indices, updates, axis=0, reduction='none')[源代码]
返回一个新tensor,根据指定索引和更新值对 input_x 中的元素进行指定操作(替换或相加)。
不支持隐式类型转换。
举例:一个三维输入tensor的返回为
output[indices[i][j][k]][j][k] = updates[i][j][k] # if axis == 0, reduction == "none" output[i][indices[i][j][k]][k] += updates[i][j][k] # if axis == 1, reduction == "add" output[i][j][indices[i][j][k]] = updates[i][j][k] # if axis == 2, reduction == "none"
警告
如果 indices 中有多个索引向量对应于同一位置,则输出中该位置值是不确定的。
在Ascend平台上,目前仅支持 reduction 设置为
"none"
的实现。在Ascend平台上,input_x 仅支持float16和float32两种数据类型。
这是一个实验性API,后续可能修改或删除。
说明
如果 indices 的值超出 input_x 索引上下界,则相应的 updates 不会更新到 input_x ,也不会抛出索引错误。 仅当indices的shape和updates的shape相同时支持求反向梯度。
- 参数:
input_x (Tensor) - 输入tensor,秩大于等于1。
indices (Tensor) - 指定索引。
updates (Tensor) - 更新值。
axis (int) - 指定索引所在的轴。默认
0
。reduction (str) - 指定操作。支持
none
,add
。默认none
。如果为
none
,将把 updates 中的元素赋值给 input_x。如果为
add
,将把 updates 中的元素与 input_x 中的元素相加。
- 返回:
Tensor
- 支持平台:
Ascend
GPU
CPU
样例:
>>> import mindspore >>> input_x = mindspore.tensor([[1, 2, 3, 4, 5]]) >>> indices = mindspore.tensor([[2, 4]]) >>> updates = mindspore.tensor([[8, 8]]) >>> output = mindspore.ops.tensor_scatter_elements(input_x, indices, updates, axis=1, reduction="none") >>> print(output) [[1 2 8 4 8]] >>> output = mindspore.ops.tensor_scatter_elements(input_x, indices, updates, axis=1, reduction="add") >>> print(output) [[ 1 2 11 4 13]]