擅长:python、mysql、java
<p><code>numpy 1.8</code>实现<code>partition</code>和<code>argpartition</code>,它们执行部分排序(在O(n)时间内,而不是完全排序(O(n)*log(n))。</p>
<pre><code>import numpy as np
test = np.array([9,1,3,4,8,7,2,5,6,0])
temp = np.argpartition(-test, 4)
result_args = temp[:4]
temp = np.partition(-test, 4)
result = -temp[:4]
</code></pre>
<p>结果:</p>
<pre><code>>>> result_args
array([0, 4, 8, 5]) # indices of highest vals
>>> result
array([9, 8, 6, 7]) # highest vals
</code></pre>
<p>时间安排:</p>
<pre><code>In [16]: a = np.arange(10000)
In [17]: np.random.shuffle(a)
In [18]: %timeit np.argsort(a)
1000 loops, best of 3: 1.02 ms per loop
In [19]: %timeit np.argpartition(a, 100)
10000 loops, best of 3: 139 us per loop
In [20]: %timeit np.argpartition(a, 1000)
10000 loops, best of 3: 141 us per loop
</code></pre>