Finden eindeutiger Punkte in einem Array

8

Was ist ein schneller Weg, um eindeutige x, y Punkte (Entfernen von Duplikaten) in einem numpligen Array wie:

zu finden %Vor%

Ich dachte daran, Punkte in komplexe Zahlen zu konvertieren und dann nach dem Einfachen zu suchen, aber das scheint ziemlich kompliziert zu sein:

%Vor%     
Benjamin 03.11.2011, 02:44
quelle

2 Antworten

7

Ich würde es so machen:

numpy.array(list(set(tuple(p) for p in points)))

Für die schnelle Lösung im allgemeinsten Fall könnte dieses Rezept Sie interessieren: Ссылка

    
wim 03.11.2011, 04:36
quelle
7

Ich denke, Sie haben hier eine sehr gute Idee. Denken Sie an den zugrunde liegenden Speicherblock, der zur Darstellung der Daten in points verwendet wird. Wir sagen numpy, dass dieser Block ein Array von shape (10,2) mit dtype int32 (32-Bit-Integer) darstellt, aber es ist fast kostenlos, numpy denselben Speicherblock als ein Array von zu betrachten Form (10,) mit dtype c8 (64-Bit-Komplex).

Die einzigen echten Kosten sind also der Aufruf von np.unique , gefolgt von einem weiteren Aufruf von view und reshape :

%Vor%

ergibt

%Vor%

während

%Vor%

ergibt

%Vor%

Wenn das Ergebnis nicht sortiert werden muss, ist die Methode von wim schneller (Sie sollten vielleicht in Erwägung ziehen, seine Antwort zu akzeptieren ...)

%Vor%

liefert diese Benchmarks:

%Vor%     
unutbu 03.11.2011 03:14
quelle

Tags und Links