擅长:python、mysql、java
<p><a href="http://pypi.python.org/pypi/Bottleneck" rel="noreferrer">^{<cd1>}</a>模块有一个快速的部分排序方法,直接与Numpy数组一起工作:<a href="http://berkeleyanalytics.com/bottleneck/reference.html#bottleneck.partition" rel="noreferrer">^{<cd2>}</a>。</p>
<p>请注意,<code>bottleneck.partition()</code>返回已排序的实际值,如果需要排序值的索引(返回的是什么),则应使用<a href="http://berkeleyanalytics.com/bottleneck/reference.html#bottleneck.argpartition" rel="noreferrer">^{<cd5>}</a>。</p>
<p>我的基准是:</p>
<ul>
<li><code>z = -bottleneck.partition(-a, 10)[:10]</code></li>
<li><code>z = a.argsort()[-10:]</code></li>
<li><code>z = heapq.nlargest(10, a)</code></li>
</ul>
<p>其中<code>a</code>是一个随机的1000000元素数组。</p>
<p>时间安排如下:</p>
<ul>
<li><code>bottleneck.partition()</code>:每个循环25.6毫秒</li>
<li><code>np.argsort()</code>:每个循环198毫秒</li>
<li><code>heapq.nlargest()</code>:每个循环358毫秒</li>
</ul>