scatter_nd_add

  • paddle.fluid.layers.scatter_nd_add(ref, index, updates, name=None)[源代码]

该OP通过对Variable中的单个值或切片应用稀疏加法,从而得到输出的Variable。

ref 是维度为 R 的张量。 index 是维度为 K 的张量。因此, index 的形状是

scatter_nd_add - 图1 ,其中 scatter_nd_add - 图2updates 是一个维度为 scatter_nd_add - 图3 的张量,它的形状是 scatter_nd_add - 图4

根据 index

scatter_nd_add - 图5 得到相应的 updates 切片,将其加到根据 index 的最后一维得到 ref 切片上,从而得到最终的输出张量。

示例:

  1. - 案例 1:
  2. ref = [0, 1, 2, 3, 4, 5]
  3. index = [[1], [2], [3], [1]]
  4. updates = [9, 10, 11, 12]
  5.  
  6. 得到:
  7.  
  8. output = [0, 22, 12, 14, 4, 5]
  9.  
  10. - 案例 2:
  11. ref = [[65, 17], [-14, -25]]
  12. index = [[], []]
  13. updates = [[[-1, -2], [1, 2]],
  14. [[3, 4], [-3, -4]]]
  15. ref.shape = (2, 2)
  16. index.shape = (2, 0)
  17. updates.shape = (2, 2, 2)
  18.  
  19. 得到:
  20.  
  21. output = [[67, 19], [-16, -27]]
  • 参数:
    • ref (Variable) - 输入张量,数据类型可以是int32,int64,float32,float64。
    • index (Variable) - 输入的索引张量,数据类型为非负int32或非负int64。它的维度 index.rank 必须大于1,并且 index.shape[-1] <= ref.rank
    • updates (Variable) - 输入的更新张量,它必须和 ref 有相同的数据类型。形状必须是 index.shape[:-1] + ref.shape[index.shape[-1]:]
    • name (string) - 该层的名字,默认值为None,表示会自动命名。

返回:数据类型和形状都与 ref 相同的Tensor|LoDTensor。

返回类型:Variable

代码示例

  1. import paddle.fluid as fluid
  2. ref = fluid.layers.data(name='ref', shape=[3, 5, 9, 10], dtype='float32', append_batch_size=False)
  3. index = fluid.layers.data(name='index', shape=[3, 2], dtype='int32', append_batch_size=False)
  4. updates = fluid.layers.data(name='update', shape=[3, 9, 10], dtype='float32', append_batch_size=False)
  5. output = fluid.layers.scatter_nd_add(ref, index, updates)