index_sample

paddle. index_sample ( x, index ) [源代码]

该OP实现对输入 x 中的元素进行批量抽样,取 index 指定的对应下标的元素,按index中出现的先后顺序组织,填充为一个新的张量。

该OP中 xindex 都是 2-D 张量。 index 的第一维度与输入 x 的第一维度必须相同, index 的第二维度没有大小要求,可以重复索引相同下标元素。

参数

  • x (Tensor)– 输入的二维张量,数据类型为 int32,int64,float32,float64。

  • index (Tensor)– 包含索引下标的二维张量。数据类型为 int32,int64。

返回

-Tensor ,数据类型与输入 x 相同,维度与 index 相同。

代码示例

  1. import paddle
  2. x = paddle.to_tensor([[1.0, 2.0, 3.0, 4.0],
  3. [5.0, 6.0, 7.0, 8.0],
  4. [9.0, 10.0, 11.0, 12.0]], dtype='float32')
  5. index = paddle.to_tensor([[0, 1, 2],
  6. [1, 2, 3],
  7. [0, 0, 0]], dtype='int32')
  8. target = paddle.to_tensor([[100, 200, 300, 400],
  9. [500, 600, 700, 800],
  10. [900, 1000, 1100, 1200]], dtype='int32')
  11. out_z1 = paddle.index_sample(x, index)
  12. print(out_z1)
  13. #[[1. 2. 3.]
  14. # [6. 7. 8.]
  15. # [9. 9. 9.]]
  16. # 巧妙用法:使用topk op产出的top元素的下标
  17. # 在另一个tensor中索引对应位置的元素
  18. top_value, top_index = paddle.topk(x, k=2)
  19. out_z2 = paddle.index_sample(target, top_index)
  20. print(top_value)
  21. #[[ 4. 3.]
  22. # [ 8. 7.]
  23. # [12. 11.]]
  24. print(top_index)
  25. #[[3 2]
  26. # [3 2]
  27. # [3 2]]
  28. print(out_z2)
  29. #[[ 400 300]
  30. # [ 800 700]
  31. # [1200 1100]]