Sie können verwenden np.maximum.reduceat
:
Weitere Informationen über die Funktionsweise des ufunc reduceat
-Methode können hier zu finden .
Bemerkung über die Leistung
np.maximum.reduceat
ist sehr schnell. Die Erzeugung der Indizes idx
ist das, was hier den größten Teil der Zeit in Anspruch nimmt.
Während _, idx = np.unique(g, return_index=True)
eine elegante Art ist, die Indizes zu erhalten, ist es nicht besonders schnell.
Der Grund ist, dass np.unique
das Array zuerst sortieren muss, was O (n log n) in der Komplexität ist. Bei großen Arrays ist dies viel teurer als die Verwendung mehrerer O (n) -Operationen zum Generieren von idx
.
Daher ist es bei großen Arrays viel schneller, stattdessen Folgendes zu verwenden:
%Vor%