Python中文
首页
教程
问答
标签
搜索
登录
注册
高效查找Python数组/列表中N个最大元素的索引
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>如果这是一个重复的问题,我很抱歉,我找了这个信息,但仍然找不到。</p> <p>通过使用N个最大元素的索引以非常高效的降序排列numpy数组(或python列表)是可能的吗?</p> <p>例如,数组:</p> <pre><code>a = array([4, 1, 0, 8, 5, 2]) </code></pre> <p>按降序排列的最大元素的索引将给出(考虑N=6,所有元素都包括在内):</p> <p>8-->;3个</p> <p>5--gt;4个</p> <p>4-->;0</p> <p>2--gt;5个</p> <p>1-->;1</p> <p>0-->;2</p> <pre><code>result = [3, 4, 0, 5, 1, 2] </code></pre> <p>我知道如何使用一种有点愚蠢的方法(比如对数组进行排序并搜索N个数字中的每一个作为它们的索引),但是我想知道是否有像瓶颈或heapq这样的有效库,或者也许有一种pythonic方法可以使这个过程非常快速。我必须把它应用到几个数组中,每个数组有300k个元素,所以性能是个问题。</p> <p>提前谢谢!</p> <p><strong>更新</strong></p> <p>我读了答案,决定用300k随机整数计时,结果如下:</p> <p><strong>溶液1:</strong><code>sorted(range(len(a)), key=lambda i:a[i])</code><strong>时间:</strong>230ms</p> <p>溶液2:</strong><code>heapq.nlargest(len(a), zip(a, itertools.count()))</code><strong>时间:</strong>396ms</p> <p>溶液3:</strong><code>heapq.nlargest(len(a), enumerate(a), key=operator.itemgetter(1))</code><strong>时间:</strong>864 ms</p> <p>溶液4:</strong><code>def f(a,N): return np.argsort(a)[::-1][:N] (N = len(a))</code><strong>时间:104 ms</strong></p> <p>非常感谢你的快速和非常好的回答!</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<pre><code>L = [4, 1, 0, 8, 5, 2] sorted(range(len(L)), key=lambda i:L[i]) </code></pre>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
python语法错误(如果不在Z中,则在X中表示s)
8 回答
Python语法错误(无效)概率
3 回答
python语法错误*带有可选参数的args
1 回答
python语法错误2.5版有什么办法解决吗?
9 回答
Python语法错误2.7.4
9 回答
python语法错误30/09/2013
2 回答
Python语法错误E001
4 回答
Python语法错误not()op
8 回答
python语法错误outpu
2 回答
Python语法错误print len()
5 回答
python语法错误w3
2 回答
Python语法错误不是caugh
9 回答
python语法错误及yt-packag的使用
10 回答
python语法错误可以查出来!!瓦里亚布
10 回答
Python语法错误可能是缩进?
1 回答
Python语法错误和缩进
1 回答
Python语法错误在while循环中生成随机numb
5 回答
Python语法错误在哪里?
4 回答
python语法错误在尝试导入包时,但仅在远程运行时
3 回答
Python语法错误在电子邮件地址提取脚本中
3 回答