Ich habe ein Raster mit einer Reihe einzigartiger ID-Patches / Regionen, die ich in ein zweidimensionales Python-Numpy-Array umgewandelt habe. Ich möchte paarweise euklidische Abstände zwischen allen Regionen berechnen , um den Mindestabstand zwischen den nächstgelegenen Kanten jedes Raster-Patches zu erhalten. Da das Array ursprünglich ein Raster war, muss eine Lösung diagonale Abstände zwischen den Zellen berücksichtigen (ich kann immer alle in Zellen gemessenen Abstände durch Multiplikation mit der Rasterauflösung in Meter umrechnen).
Ich habe mit der cdist
-Funktion von scipy.spatial.distance
experimentiert, wie in dieser Antwort auf eine verwandte Frage vorgeschlagen , aber bisher konnte ich mein Problem mit der verfügbaren Dokumentation nicht lösen. Als Endergebnis hätte ich idealerweise ein 3 x X-Array in Form von "von ID zu ID, Abstand", einschließlich der Abstände zwischen allen möglichen Kombinationen von Regionen.
Hier ist ein Beispieldatensatz, der meinen Eingabedaten ähnelt:
%Vor%
Abstände zwischen markierten Bereichen eines Bildes können mit dem folgenden Code berechnet werden,
%Vor%Dies setzt ganzzahlige IDs voraus und müsste erweitert werden, falls dies nicht der Fall ist. Zum Beispiel ist mit den obigen Testdaten die berechnete Distanzmatrix
%Vor%, während die vollständige Ausgabe hier gefunden werden kann. Beachten Sie, dass dies die euklidische Entfernung von der Mitte jedes Pixels ist. Zum Beispiel ist der Abstand zwischen den Zonen 1 und 3 2,0, während sie durch 1 Pixel getrennt sind.
Dies ist ein Brute-Force-Ansatz, bei dem wir alle paarweisen Abstände zwischen Pixeln verschiedener Regionen berechnen. Dies sollte für die meisten Anwendungen ausreichen. Wenn Sie jedoch eine bessere Leistung benötigen, sehen Sie sich % co_de an % , was den Mindestabstand zwischen zwei Regionen im Vergleich zu scipy.spatial.cKDTree
effizienter berechnen würde.