Der effizienteste Weg, den Modus in einem numply-Array zu finden
Ich habe ein 2D-array mit Ganzzahlen (beide positiv oder negativ). Jede Zeile repräsentiert die Werte über die Zeit für einen bestimmten räumlichen Ort, in der Erwägung, dass jede Spalte stellt die Werte für die verschiedenen räumlichen Standorten für eine bestimmte Zeit.
So, wenn das array wie:
1 3 4 2 2 7
5 2 2 1 4 1
3 3 2 2 1 1
Sollte das Ergebnis
1 3 2 2 2 1
Beachten Sie, dass wenn mehrere Werte für den Modus, eine (zufällig ausgewählte) kann festgelegt werden, wie-Modus.
Ich kann die Iteration über die Spalten zu finden-Modus, ein zu einer Zeit, aber ich hatte gehofft, numpy vielleicht haben einige in-built-Funktion zu tun. Oder wenn es ein trick zu finden, das effizient ohne Schleifen.
InformationsquelleAutor der Frage Nik | 2013-05-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Überprüfen
scipy.stats.Modus()
(inspiriert von @tom10 Kommentar):Ausgabe:
Wie Sie sehen können, gibt es sowohl die mode-als auch den Grafen. Sie können wählen Sie die Modi direkt über
m[0]
:Ausgabe:
InformationsquelleAutor der Antwort fgb
Dies ist ein schwieriges problem, da es nicht viel gibt, um zu berechnen-Modus entlang einer Achse. Die Lösung ist einfach, für 1-D-arrays, wo
numpy.bincount
ist praktisch, zusammen mitnumpy.unique
mit derreturn_counts
arg wieTrue
. Die häufigsten n-dimensionale Funktion, die ich sehe, ist scipy.stats.Modus, obwohl es ist zu langsam - vor allem für große arrays mit vielen einzigartigen Werte. Als Lösung habe ich entwickelt diese Funktion, und verwenden Sie es schwer:Ergebnis:
Einige benchmarks:
EDIT: um mehr von einem hintergrund und verändert den Ansatz für mehr Speicher-effiziente
InformationsquelleAutor der Antwort Devin Cairns
Erweiterung auf diese Methodeangewendet auf die Suche nach dem Modus der Daten, wo müssen Sie möglicherweise den index des aktuellen array zu sehen, wie weit der Wert von der Mitte der Verteilung.
Erinnern zu verwerfen-Modus, wenn len(np.argmax(zählt)) > 1, auch um zu überprüfen, ob es tatsächlich Vertreter der zentralen Verteilung Ihrer Daten können Sie überprüfen, ob es sich in Ihrem standard-Abweichung Intervall.
InformationsquelleAutor der Antwort Lean Bravo
Ich denke, eine sehr einfache Möglichkeit wäre die Verwendung der Counter-Klasse. Sie können dann die most_common () - Funktion der Zähler-Beispiel wie bereits erwähnt hier.
Für 1-d-arrays:
Für mehrere eindimensionale arrays (kleine Differenz):
Dies kann oder kann nicht sein, eine effiziente Implementierung, aber es ist bequem.
InformationsquelleAutor der Antwort Ali_Ayub