如何使用numpy实现topk函数操作并排序(numpy,topk,开发技术)

时间:2024-05-09 08:05:43 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

    %E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8numpy%E5%AE%9E%E7%8E%B0topk%E5%87%BD%E6%95%B0%E6%93%8D%E4%BD%9C%E5%B9%B6%E6%8E%92%E5%BA%8F

topK算法经常在各种功能中使用到,在python中,numpy等计算库使用了丰富的底层优化,对于矩阵计算的效率远高于python的for-loop实现。但是numpy中并没有直接提供topK算法的直接实现。

pytorch 库提供了topk函数,可以将高维数组沿某一维度(该维度共N项),选出最大(最小)的K项并排序。返回排序结果和index信息。奇怪的是,更轻量级的numpy库并没有直接提供 topK 函数。numpy只提供了argpartition 和 partition,可以将最大(最小)的K项排到前K位。以argpartition为例,最小的3项排到了前3位:

注意,argpartition实现的是 partial sorting,如上例,前3项和其余项被分开,但是两部分各自都是不排序的!而我们可能更想要topK的几项排好序(其余项则不作要求)。因此,下面提供一种基于argpartition的topK方法。

最简单的方法自然是全排序,然后取前K项。缺点在于,要把topK之外的数据也进行排序,当K << N时较为浪费时间,复杂度为O ( n log ⁡ n ) O(n log n)O(nlogn):

对于 np.argpartition 函数,复杂度可能下降到 O ( n log ⁡ K ) O(n log K)O(nlogK),很多情况下,K << N,此时naive方法有优化的空间。

以下方法首先选出 topK 项,然后仅对前topK项进行排序(matrix仅限2d-array)。

对shape(5000, 100000)的矩阵进行topK排序,测试时间为:

如何使用numpy实现topk函数操作并排序

补充:python堆排序实现TOPK问题

本文:如何使用numpy实现topk函数操作并排序的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:NumPy ndarray的数据类型怎么使用下一篇:

5 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18