You can also use numpy's percentile function. In my case it was slightly faster then bottleneck.partsort():
import timeitimport bottleneck as bnN,M,K = 10,1000000,100start = timeit.default_timer()for k in range(K): a=np.random.uniform(size=M) tmp=-bn.partsort(-a, N)[:N]stop = timeit.default_timer()print (stop - start)/Kstart = timeit.default_timer()perc = (np.arange(M-N,M)+1.0)/M*100for k in range(K): a=np.random.uniform(size=M) tmp=np.percentile(a,perc)stop = timeit.default_timer()print (stop - start)/K
Average time per loop:
- bottleneck.partsort(): 59 ms
- np.percentile(): 54 ms