topk

paddle.topk(x, k, axis=None, largest=True, sorted=True, name=None)

该OP沿着可选的 axis 查找topk最大或者最小的结果和结果所在的索引信息。 如果是一维Tensor,则直接返回topk查询的结果。如果是多维Tensor,则在指定的轴上查询topk的结果。

参数

  • x (Tensor) - 输入的多维 Tensor ,支持的数据类型:float32、float64、int32、int64。

  • k (int,Tensor) - 在指定的轴上进行top寻找的数量。

  • axis (int,可选) - 指定对输入Tensor进行运算的轴, axis 的有效范围是[-R, R),R是输入 x 的Rank, axis 为负时与 axis + R 等价。默认值为-1。

  • largest (bool,可选) - 指定算法排序的方向。如果设置为True,排序算法按照降序的算法排序,否则按照升序排序。默认值为True。

  • sorted (bool,可选) - 控制返回的结果是否按照有序返回,默认为True。在gpu上总是返回有序的结果。

  • name (str,可选) – 具体用法请参见 Name ,一般无需设置,默认值为None。

返回

tuple(Tensor), 返回topk的结果和结果的索引信息。结果的数据类型和输入 x 一致。索引的数据类型是int64。

代码示例

  1. import paddle
  2. data_1 = paddle.to_tensor([1, 4, 5, 7])
  3. value_1, indices_1 = paddle.topk(data_1, k=1)
  4. print(value_1) # [7]
  5. print(indices_1) # [3]
  6. data_2 = paddle.to_tensor([[1, 4, 5, 7], [2, 6, 2, 5]])
  7. value_2, indices_2 = paddle.topk(data_2, k=1)
  8. print(value_2) # [[7], [6]]
  9. print(indices_2) # [[3], [1]]
  10. value_3, indices_3 = paddle.topk(data_2, k=1, axis=-1)
  11. print(value_3) # [[7], [6]]
  12. print(indices_3) # [[3], [1]]
  13. value_4, indices_4 = paddle.topk(data_2, k=1, axis=0)
  14. print(value_4) # [[2, 6, 5, 7]]
  15. print(indices_4) # [[1, 1, 0, 0]]