Use numpy.argpartition()
:
k = 3np.argpartition(arr, len(arr) - k)[-k:]
Adjust k
index to whatever you need.
NOTE: returned indices are not guaranteed to be in the "sorted order" - just that anything past index k
is larger than the value at position k
in the sorted array.
NOTE 2: If you do need the returned indices to be sorted themselves, then simply add a numpy.sort()
to the above command:
np.sort(np.argpartition(arr, len(arr) - k)[-k:])
numpy.argpartition()
provides significant performance gains over full sort
especially for large arr
. In the above example you do a full sort only over the selected indices (not all).