无法理解numpy argpartition输出

无法理解numpy argpartition输出,第1张

无法理解numpy argpartition输出

我们需要使用按排序顺序保留的索引列表,而不是将第k个参数作为标量输入。因此,要保持第一个

5
元素的排序性质
np.argpartition(a,5)[:5]
,只需执行-

np.argpartition(a,range(5))[:5]

这里是一个示例,目的是为了使事情更清楚:

In [84]: a = np.random.rand(10)In [85]: aOut[85]: array([ 0.85017222,  0.19406266,  0.7879974 ,  0.40444978,  0.46057793,        0.51428578,  0.03419694,  0.47708   ,  0.73924536,  0.14437159])In [86]: a[np.argpartition(a,5)[:5]]Out[86]: array([ 0.19406266,  0.14437159,  0.03419694,  0.40444978,  0.46057793])In [87]: a[np.argpartition(a,range(5))[:5]]Out[87]: array([ 0.03419694,  0.14437159,  0.19406266,  0.40444978,  0.46057793])

请注意,这

argpartition
在性能方面是有意义的,如果我们希望获取一小部分元素的排序索引,那么可以说元素
k
数占元素总数的一小部分。

让我们使用一个更大的数据集,并尝试获取所有元素的排序索引,以使上述要点更清楚:

In [51]: a = np.random.rand(10000)*100In [52]: %timeit np.argpartition(a,range(a.size-1))[:5]10 loops, best of 3: 105 ms per loopIn [53]: %timeit a.argsort()1000 loops, best of 3: 893 µs per loop

因此,要对所有元素进行排序

np.argpartition
并不是要走的路。

现在,假设我想只获取具有该大数据集的前5个元素的排序索引,并保持这些元素的顺序-

In [68]: a = np.random.rand(10000)*100In [69]: np.argpartition(a,range(5))[:5]Out[69]: array([1647,  942, 2167, 1371, 2571])In [70]: a.argsort()[:5]Out[70]: array([1647,  942, 2167, 1371, 2571])In [71]: %timeit np.argpartition(a,range(5))[:5]10000 loops, best of 3: 112 µs per loopIn [72]: %timeit a.argsort()[:5]1000 loops, best of 3: 888 µs per loop

在这里非常有用!



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5008674.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存