2016-07-19 4 views
3

Ich habe eine Reihe von diskretisierten Koordinaten in einem Nx2 numpy.ndarray.2D-Äquivalent von numpy.unique

Ich möchte die Zählungen und Indizes jedes dieser eindeutigen Koordinatensätze erhalten. numpy.unique macht genau das, aber für skalare Elemente.

Gibt es einen sauberen Weg, dies mit numpy zu tun?

Beispiel:

#input 
coor = np.array([[10,10],[12,9],[10,5],[12,9]]) 
#output 
unique_count = np.array([1,2,1]) 
unique_index = np.array([0,1,2]) #1 could also be 3 

EDIT: unique count würde die Zählungen von jedem der eindeutigen Werte geben, das heißt: 1 von [10,10], 2 und 1 des [12,9][10,5]. Man würde dann die Werte finden diese entsprechen coor[unique_index]

+0

Können Sie genauer der Gehalt an unique_count und unique_index erklären? Ich verstehe es nicht. – Ohumeronen

+0

@Ohumeronen Weil ich die Indizes der Koordinatenpaare haben möchte, nicht die Zählung, wenn jede der X/Y-Koordinaten selbst –

+0

ich beginne zu verstehen ... – Ohumeronen

Antwort

1

Sie .count() und die können .index() Liste Methoden

coor = np.array([[10, 10], [12, 9], [10, 5], [12, 9]]) 
coor_tuple = [tuple(x) for x in coor] 
unique_coor = sorted(set(coor_tuple), key=lambda x: coor_tuple.index(x)) 
unique_count = [coor_tuple.count(x) for x in unique_coor] 
unique_index = [coor_tuple.index(x) for x in unique_coor] 
+0

habe ich es versucht aber habe die folgende Ausgabe '(array ([5, 9, 10, 12]), array ([5, 3, 0, 2]), array ([1, 2, 3, 2])) ', => 3' 10's, 2 '12' und '9's und 1' 5'. Ich denke, es könnte das Array abflachen, bevor es den eindeutigen Wert berechnet, wie die Indizes ebenfalls andeuten. –

+0

Ja, Sie haben Recht, siehe meine Bearbeitung. Ich denke nicht, dass es der schnellste Weg ist, um das zu tun, was Sie wollen, aber es funktioniert. –