Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich die Indizes mehrerer Maximalwerte in einem NumPy-Array effizient finden?

Wie kann ich die Indizes mehrerer Maximalwerte in einem NumPy-Array effizient finden?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-02 13:24:15902Durchsuche

How Can I Efficiently Find the Indices of Multiple Maximum Values in a NumPy Array?

Indizes mehrerer Maximalwerte in NumPy-Arrays abrufen

NumPy bietet eine praktische np.argmax-Funktion zum Abrufen des Index des Maximalwerts in ein Array. Was aber, wenn Sie die Indizes der obersten N-Maximalwerte finden müssen?

Lösung

Neueste NumPy-Versionen (1.8 und höher) führen hierfür die argpartition-Funktion ein Zweck. Um die Indizes der obersten N-Elemente zu erhalten, befolgen Sie diese Schritte:

import numpy as np

# Original array
a = np.array([9, 4, 4, 3, 3, 9, 0, 4, 6, 0])

# Find indices of top N elements (N = 4 in this case)
ind = np.argpartition(a, -4)[-4:]

# Extract top N elements
top4 = a[ind]

# Print indices and top N elements
print("Indices:", ind)
print("Top 4 elements:", top4)

Erklärung

np.argpartition sortiert das Array teilweise und partitioniert es in zwei Unter- Arrays: Das erste Unterarray enthält die obersten N Elemente (in diesem Fall die größten 4 Elemente) und das zweite Unterarray enthält die restlichen Elemente. Das zurückgegebene Array ind enthält die Indizes der Elemente im ersten Unterarray.

Die Ausgabe in diesem Beispiel wäre:

Indices: [1 5 8 0]
Top 4 elements: [4 9 6 9]

Optimierungen

Wenn auch sortierte Indizes benötigt werden, können Sie diese separat sortieren:

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

Dieser Schritt erfordert O(k log k) Zeit, wobei k die Anzahl der abzurufenden Top-Elemente ist. Insgesamt hat dieser Ansatz eine zeitliche Komplexität von O(n k log k), was ihn für große Arrays und mittlere Werte von k effizient macht.

Das obige ist der detaillierte Inhalt vonWie kann ich die Indizes mehrerer Maximalwerte in einem NumPy-Array effizient finden?. 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