Rate this Page

torch.Tensor.scatter_reduce_#

Tensor.scatter_reduce_(dim,index,src,reduce,*,include_self=True)Tensor#

Reduces all values from thesrc tensor to the indices specified intheindex tensor in theself tensor using the applied reductiondefined via thereduce argument ("sum","prod","mean","amax","amin"). For each value insrc, it is reduced to anindex inself which is specified by its index insrc fordimension!=dim and by the corresponding value inindex fordimension=dim. Ifinclude_self="True", the values in theselftensor are included in the reduction.

self,index andsrc should all havethe same number of dimensions. It is also required thatindex.size(d)<=src.size(d) for all dimensionsd, and thatindex.size(d)<=self.size(d) for all dimensionsd!=dim.Note thatindex andsrc do not broadcast.

For a 3-D tensor withreduce="sum" andinclude_self=True theoutput is given as:

self[index[i][j][k]][j][k]+=src[i][j][k]# if dim == 0self[i][index[i][j][k]][k]+=src[i][j][k]# if dim == 1self[i][j][index[i][j][k]]+=src[i][j][k]# if dim == 2

Note

This operation may behave nondeterministically when given tensors on a CUDA device. SeeReproducibility for more information.

Note

The backward pass is implemented only forsrc.shape==index.shape.

Warning

This function is in beta and may change in the near future.

Parameters
  • dim (int) – the axis along which to index

  • index (LongTensor) – the indices of elements to scatter and reduce.

  • src (Tensor) – the source elements to scatter and reduce

  • reduce (str) – the reduction operation to apply for non-unique indices("sum","prod","mean","amax","amin")

  • include_self (bool) – whether elements from theself tensor areincluded in the reduction

Example:

>>>src=torch.tensor([1.,2.,3.,4.,5.,6.])>>>index=torch.tensor([0,1,0,1,2,1])>>>input=torch.tensor([1.,2.,3.,4.])>>>input.scatter_reduce(0,index,src,reduce="sum")tensor([5., 14., 8., 4.])>>>input.scatter_reduce(0,index,src,reduce="sum",include_self=False)tensor([4., 12., 5., 4.])>>>input2=torch.tensor([5.,4.,3.,2.])>>>input2.scatter_reduce(0,index,src,reduce="amax")tensor([5., 6., 5., 2.])>>>input2.scatter_reduce(0,index,src,reduce="amax",include_self=False)tensor([3., 6., 5., 2.])