Nouveaux NumPy versions (1.8) ont une fonction appelée argpartition
pour cette. Pour obtenir les indices des quatre grands éléments, ne
>>> a
array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> ind = np.argpartition(a, -4)[-4:]
>>> ind
array([1, 5, 8, 0])
>>> a[ind]
array([4, 9, 6, 9])
Contrairement aux argsort
, cette fonction s'exécute en temps linéaire dans le pire des cas, mais le retour sur les indices ne sont pas triés, comme on peut le voir à partir du résultat de l'évaluation de l' a[ind]
. Si vous avez besoin que trop, de les trier par la suite:
>>> ind[np.argsort(a[ind])]
array([1, 8, 5, 0])
Pour obtenir le top-k éléments dans l'ordre de tri dans cette voie prend O(n + k lg k) temps.