# Python – A fast way to find the largest N elements in an numpy array

numpypythonsorting

I know I can do it like the following:

``````import numpy as np
N=10
a=np.arange(1,100,1)
np.argsort()[-N:]
``````

However, it is very slow since it did a full sort.

I wonder whether numpy provide some methods the do it fast.

#### Best Solution

`numpy 1.8` implements `partition` and `argpartition` that perform partial sort ( in O(n) time as opposed to full sort that is O(n) * log(n)).

``````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]
``````

Result:

``````>>> result_args
array([0, 4, 8, 5]) # indices of highest vals
>>> result
array([9, 8, 6, 7]) # highest vals
``````

Timing:

``````In : a = np.arange(10000)

In : np.random.shuffle(a)

In : %timeit np.argsort(a)
1000 loops, best of 3: 1.02 ms per loop

In : %timeit np.argpartition(a, 100)
10000 loops, best of 3: 139 us per loop

In : %timeit np.argpartition(a, 1000)
10000 loops, best of 3: 141 us per loop
``````