scatter_reduce

paddle. scatter_reduce ( input: Tensor, dim: int, index: Tensor, src: Tensor, reduce: Literal['sum', 'prod', 'mean', 'amin', 'amax'], *, include_self: bool = True ) Tensor [source]

Scatter the values of the source tensor to the target tensor according to the given indices, and perform a reduction operation along the designated axis.

Parameters
  • input (Tensor) – The Input Tensor. Supported data types are bfloat16, float16, float32, float64, int32, int64, uint8.

  • dim (int) – The axis to scatter 1d slices along.

  • index (Tensor) – Indices to scatter along each 1d slice of input. This must match the dimension of input, Supported data type are int32 and int64.

  • src (Tensor) – The value element(s) to scatter. The data types should be same as input.

  • reduce (str) – The reduce operation, support ‘sum’, ‘prod’, ‘mean’, ‘amin’, ‘amax’.

  • include_self (bool, optional) – whether to reduce with the elements of input, default is ‘True’.

Returns

Tensor, The indexed element, same dtype with input

Examples

>>> import paddle

>>> x = paddle.to_tensor([[10, 20, 30], [40, 50, 60]])
>>> indices = paddle.zeros((2,3)).astype("int32")
>>> values = paddle.to_tensor([[1, 2, 3],[4, 5, 6]]).astype(x.dtype)
>>> result = paddle.scatter_reduce(x, 0, indices, values, "sum", include_self=True)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[15, 27, 39],
 [40, 50, 60]])

>>> result = paddle.scatter_reduce(x, 0, indices, values, "prod", include_self=True)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[40 , 200, 540],
 [40 , 50 , 60 ]])

>>> result = paddle.scatter_reduce(x, 0, indices, values, "mean", include_self=True)
>>> print(result)
Tensor(shape=[2, 3], dtype=int64, place=Place(cpu), stop_gradient=True,
[[5 , 9 , 13],
 [40, 50, 60]])