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!