首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >会不会有无稽之谈?

会不会有无稽之谈?
EN

Stack Overflow用户
提问于 2021-08-01 16:03:30
回答 1查看 71关注 0票数 2

我有一个有1M浮点数的数组,想要得到前10名。想知道是否有一项仅能让前10名加快速度的argsort。我想我可以执行np.argmax() 10次,每次删除生成的索引(可能是通过使其为-inf,以避免跟踪移动的索引)。只是检查一下是否有一种众所周知的内置方式。

不一定非得是粗野的。第二好是另一个很普通的图书馆。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-01 16:27:57

您确实可以使用numpy.argpartition()

代码语言:javascript
运行
复制
import numpy
a = numpy.random.rand(1000000)
b = numpy.argpartition(a, [0,1,2,3,4,5,6,7,8,9])[:10]

它的速度快了近10倍(在本例中,在我的机器上):

代码语言:javascript
运行
复制
>>> import timeit, numpy
>>> a = numpy.random.rand(1000000)
>>> # Sorting traditionally
>>> timeit.timeit('numpy.argsort(a)[:10]', globals=globals(), number=100)
10.2261...
>>> # Getting the top 10 but not in order
>>> timeit.timeit('numpy.argpartition(a, 10)[:10]', globals=globals(), number=100)
1.2125...
>>> # Getting the top 10 in order
>>> timeit.timeit('numpy.argpartition(a, [0,1,2,3,4,5,6,7,8,9])[:10]', globals=globals(), number=100)
1.4764...
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68612132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档