Heim >Backend-Entwicklung >Python-Tutorial >Wie finde ich effizient die Indizes der N größten Werte in einem NumPy-Array?

Wie finde ich effizient die Indizes der N größten Werte in einem NumPy-Array?

Susan Sarandon
Susan SarandonOriginal
2024-12-25 03:59:08460Durchsuche

How to Efficiently Find the Indices of the Top N Largest Values in a NumPy Array?

Indizes der Top-N-Werte in einem NumPy-Array identifizieren

Mit der Funktion np.argmax ist es möglich, den Index des Maximalwerts in einem NumPy-Array zu ermitteln. Zum Abrufen der Indizes mehrerer Maximalwerte werden in diesem Artikel jedoch alternative Ansätze untersucht.

Neueste NumPy-Versionen (ab 1.8) verfügen über die Funktion argpartition, die Indizes gemäß einer angegebenen Bedingung abrufen kann. Um die Indizes der n größten Elemente zu erhalten, verwenden Sie diese Funktion mit einem negativen Argument für n, was eine absteigende Sortierung angibt.

>>> a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0]) # Sample array
>>> ind = np.argpartition(a, -4)[-4:] # Indices of top 4 largest elements

Im Gegensatz zu argsort arbeitet argpartition im schlimmsten Fall linear, gibt jedoch kein Ergebnis zurück sortierte Indizes. Um sie zu sortieren, verwenden Sie np.argsort für das partitionierte Array:

>>> sorted_ind = ind[np.argsort(a[ind])]

Alternativ können Sie die erweiterten Indizierungsfunktionen von NumPy nutzen:

>>> descending_order = np.argsort(a)[::-1] # Indices of elements in descending order
>>> top_n = descending_order[:n] # Top n indices

Es gibt auch kundenspezifische Lösungen, wie zum Beispiel:

  • Sortieren des Arrays und Auswählen der obersten n Elemente
  • Iteratives Vergleichen von Elementen und Aktualisieren einer Indexliste
  • Verwenden der Funktion max() mit bedingten Zuweisungen

Das obige ist der detaillierte Inhalt vonWie finde ich effizient die Indizes der N größten Werte in einem NumPy-Array?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn