Ich versuche, eine Reihe jede Zeile in einem np.array
zeigt zu zählen, zum Beispiel:zählen, wie oft jede Zeile in numpy.array ist
import numpy as np
my_array = np.array([[1, 2, 0, 1, 1, 1],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[9, 7, 5, 3, 2, 1],
[1, 1, 1, 0, 0, 0],
[1, 2, 0, 1, 1, 1], # duplicate of row 0
[1, 1, 1, 1, 1, 0]])
Row [1, 2, 0, 1, 1, 1]
zeigt 3 Mal.
wäre eine einfache naive Lösung beinhalten alle meine Zeilen zu Tupeln konvertieren und collections.Counter
, wie diese Anwendung:
from collections import Counter
def row_counter(my_array):
list_of_tups = [tuple(ele) for ele in my_array]
return Counter(list_of_tups)
Welche ergibt:
In [2]: row_counter(my_array)
Out[2]: Counter({(1, 2, 0, 1, 1, 1): 3, (1, 1, 1, 1, 1, 0): 1, (9, 7, 5, 3, 2, 1): 1, (1, 1, 1, 0, 0, 0): 1})
Ich bin aber besorgt über die Effizienz der mein Ansatz. Und vielleicht gibt es eine Bibliothek, die eine eingebaute Möglichkeit bietet, dies zu tun. Ich habe die Frage als pandas
markiert, weil ich denke, dass pandas
das Werkzeug haben könnte, das ich suche.
Ich mag dieses Problem! Sie können 'np.lexsort' zu Ihrem Vorteil verwenden, aber ich bin nicht sicher, ob die Sammlung nach dem Sortieren schnell genug durchgeführt werden kann. – eickenberg