Mam rastrowe z zestawem unikalnych łatek/regionów ID, które przekonwertowałem na dwuwymiarową tablicę Pythona. Chciałbym, aby obliczyć parami odległości euklidesowych między wszystkimi regionami, aby uzyskać minimalną odległość oddzielającą najbliższe krawędzie każdej poprawki rastrowej. Ponieważ tablica była pierwotnie rastrem, rozwiązanie musi uwzględniać przekątne odległości między komórkami (zawsze mogę zamienić odległości zmierzone w komórkach z powrotem na metry, mnożąc przez rozdzielczość rastra).Obliczanie odległości między unikatowymi regionami tablic Pythona?
Eksperymentowałem z funkcją cdist
z scipy.spatial.distance
zgodnie z sugestią w this answer to a related question, ale jak dotąd nie udało mi się rozwiązać problemu, korzystając z dostępnej dokumentacji. Jako wynik końcowy najlepiej byłoby mieć tablicę 3 x X w postaci "od ID, do ID, odległości", w tym odległości między wszystkimi możliwymi kombinacjami regionów.
Oto zbiór danych próbki przypominający mój danych wejściowych:
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')
Czy możesz podać przykładowe wyniki? –
Bez przechodzenia przez powyższą tablicę, próbka pierwszych kilku wyników idealnie wyglądałaby [coś w tym stylu] (http://i.imgur.com/HE7YTmG.jpg?1), z pierwszą kolumną reprezentującą "z "region, drugi region" do ", a trzeci kolumna" odległość ". Konkretne wyniki mogą oczywiście różnić się w zależności od algorytmu użytego do obliczenia odległości, ale to, czego szukam, jest czymś w tym klubie. –