Вот сокращенная версия Numpy:
n=3 #number of largest elements to get
a = np.array([23, 34, 2, 55, 5, 13, 44, 3])
idx = a.argsort()[:-n-1:-1] #Use argsort get sorted index and slice backwards
list(zip(a[idx], idx)) #zip and list for tuples
Вывод:
[(55, 3), (44, 6), (34, 1)]
Давайте построим несколько моментов:
import numpy
import perfplot
def sb_numpy(a,n):
idx = a.argsort()[:-n-1:-1] #Use argsort get sorted index and slice backwards
return list(zip(a[idx], idx))
def pa_pyth(a,n):
return list(sorted( ((v,i) for i,v in enumerate(a) ),reverse = True))[:n]
perfplot.show(
setup=lambda n: numpy.random.randint(0,10e7, n),
kernels=[
lambda a: sb_numpy(a,3),
lambda a: pa_pyth(a,3)
],
labels=['sb_numpy', 'pa_pyth'],
n_range=[2**k for k in range(15)],
xlabel='N'
)
Вывод:
![enter image description here](https://i.stack.imgur.com/phZJ5.png)