Ich habe ein Raster mit einer Reihe einzigartiger ID-Patches/Regionen, die ich in ein zweidimensionales Python-Numpy-Array konvertiert habe. Ich möchte paarweise Euklidische Abstände zwischen allen Regionen berechnen, um den Mindestabstand zu erhalten, der die nächstgelegenen Kanten jedes Rasterfeldes trennt. 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).Berechnen von Entfernungen zwischen eindeutigen Python-Array-Regionen?
Ich habe experimentiert mit der cdist
Funktion von scipy.spatial.distance
wie in this answer to a related question 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 meine Eingangsdaten ähnelt:
import numpy as np
import matplotlib.pyplot as plt
# Sample study area array
example_array = np.array([[0, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0],
[0, 0, 2, 0, 2, 2, 0, 6, 0, 3, 3, 3],
[0, 0, 0, 0, 2, 2, 0, 0, 0, 3, 3, 3],
[0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3],
[1, 1, 0, 0, 0, 0, 0, 0, 3, 3, 3, 3],
[1, 1, 1, 0, 0, 0, 3, 3, 3, 0, 0, 3],
[1, 1, 1, 0, 0, 0, 3, 3, 3, 0, 0, 0],
[1, 1, 1, 0, 0, 0, 3, 3, 3, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
[1, 0, 1, 0, 0, 0, 0, 5, 5, 0, 0, 0],
[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 4]])
# Plot array
plt.imshow(example_array, cmap="spectral", interpolation='nearest')
Können Sie eine Beispielausgabe bereitstellen? –
Ohne das Array oben vollständig durchzugehen, würde ein Beispiel der ersten Ergebnisse idealerweise so aussehen (http://i.imgur.com/HE7YTmG.jpg?1), wobei die erste Spalte das "von "Region, Sekunde die" zu "Region und Drittel die" Abstand "Spalte. Die spezifischen Ergebnisse können natürlich je nach Algorithmus variieren, der zur Berechnung der Entfernungen verwendet wird, aber etwas in diesem Ballpark ist das, wonach ich suche. –