paddle.tensor.manipulation. scatter_nd_add ( x, index, updates, name=None ) [source]

Output is obtained by applying sparse addition to a single value or slice in a Tensor.

x is a Tensor with ndim $$R$$ and index is a Tensor with ndim $$K$$ . Thus, index has shape $$[i_0, i_1, ..., i_{K-2}, Q]$$ where $$Q \leq R$$ . updates is a Tensor with ndim $$K - 1 + R - Q$$ and its shape is $$index.shape[:-1] + x.shape[index.shape[-1]:]$$ .

According to the $$[i_0, i_1, ..., i_{K-2}]$$ of index , add the corresponding updates slice to the x slice which is obtained by the last one dimension of index .

Given:

* Case 1:
x = [0, 1, 2, 3, 4, 5]
index = [[1], [2], [3], [1]]
updates = [9, 10, 11, 12]

we get:

output = [0, 22, 12, 14, 4, 5]

* Case 2:
x = [[65, 17], [-14, -25]]
index = [[], []]
updates = [[[-1, -2], [1, 2]],
[[3, 4], [-3, -4]]]
x.shape = (2, 2)
index.shape = (2, 0)

we get:

output = [[67, 19], [-16, -27]]

Parameters
• x (Tensor) – The x input. Its dtype should be float32, float64.

• index (Tensor) – The index input with ndim > 1 and index.shape[-1] <= x.ndim. Its dtype should be int32 or int64 as it is used as indexes.

• updates (Tensor) – The updated value of scatter_nd_add op, and it must have the same dtype as x. It must have the shape index.shape[:-1] + x.shape[index.shape[-1]:].

• name (str|None) – The output tensor name. If set None, the layer will be named automatically.

Returns

The output is a tensor with the same shape and dtype as x.

Return type

output (Tensor)

Examples

import paddle
import numpy as np

x = paddle.rand(shape=[3, 5, 9, 10], dtype='float32')