Neuere NumPy-Versionen (1.8 und höher) haben eine Funktion namens argpartition
für diese. Um die Indizes der vier größten Elemente zu erhalten, gehen Sie wie folgt vor
>>> a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> a
array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])
>>> ind = np.argpartition(a, -4)[-4:]
>>> ind
array([1, 5, 8, 0])
>>> top4 = a[ind]
>>> top4
array([4, 9, 6, 9])
Anders als argsort
läuft diese Funktion im ungünstigsten Fall in linearer Zeit, aber die zurückgegebenen Indizes sind nicht sortiert, wie man am Ergebnis der Auswertung von a[ind]
. Wenn Sie das auch brauchen, sortieren Sie sie anschließend:
>>> ind[np.argsort(a[ind])]
array([1, 8, 5, 0])
Um die Top- k Elemente in sortierter Reihenfolge auf diese Weise dauert O( n + k Protokoll k ) Zeit.