2017-12-31 126 views
-1

Ich möchte die EPS von DBSCAN finden. Ich habe eine Reihe von Punkten und muss den Abstand von jedem Punkt zu jedem anderen Punkt berechnen. Wo ein Array von Form ist (2267436, 2), dann finde den Nah- und den Minpunkt. Hier sind meine Daten:Speicherfehler beim Berechnen der euklidischen Entfernung zwischen den Punkten

xy= [[ 177963.16728699 2506663.75713195] 
[ 176147.50406716 2502422.34894945] 
[ 178480.33178874 2507299.83467826] 
..., 
[ 231205.88139267 2684014.30324774] 
[ 231207.81085397 2684014.52219471] 
[ 231214.870296 2684054.8263628 ]] 

Ich versuche, diese Methoden wie:

dist = scipy.spatial.distance.cdist(xy, xy,'euclidean') 

oder

np.sqrt((np.square(npxy[:,np.newaxis]-npxy).sum(axis=2))) 

oder

dist=scipy.spatial.distance.pdist(npxy) 
d_matrix = scipy.spatial.distance.squareform(dist) 

Ich erhalte Memory für alle. Gibt es eine Lösung, um es herauszufinden?

+4

Es gibt 2.267.436 wählen 2 = 2,570,631,873,330 (über 2,5 Billionen) eindeutige Paare von Punkten, und ein naiver Abstandsmatrix wird über 5 Billionen Einträge haben. Vielleicht sollten Sie Ihren Algorithmus überdenken. –

+1

@FenilPatel Bitte lesen Sie die Frage noch einmal und überdenken Sie, ob "knear" wirklich ein Tippfehler war oder ob es sich auf [knn] bezieht (https://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm). Wenn Sie nach einer Bearbeitung immer noch nicht verstehen, was eine Person bedeutet, bearbeiten Sie nicht an erster Stelle. –

Antwort

1

mit einigen sehr einfachen Mathe Sie herausfinden können, dass man nicht speichern alle O (n²) Abstand im Speicher.

Wenn Sie nur die Abstände von einem Punkt zu einem Zeitpunkt berechnen, werden Sie in Ordnung sein.

Versuchen Sie auch, um einen Index zu verwenden, um die Laufzeit von O (n²) zu einem überschaubaren Maßstab zu reduzieren.

Oder Sie verwenden einen moderneren Algorithmus wie OPTIK.

+0

ja! Wenn ich nur einen Punkt berechne, ist alles in Ordnung! aber das ist meine essayarbeit, ich muss es herausfinden, jetzt benutze ich arcmap tool wie punktabstand und nah, es wird viel zeit brauchen, aber werde nicht memoryerror bekommen, vielleicht wenn ich aufstehe, wird es ok sein! trotzdem danke ! –

Verwandte Themen