मेरे पास अद्वितीय आईडी पैच/क्षेत्रों के सेट के साथ एक रास्टर है जिसे मैंने दो-आयामी पायथन numpy सरणी में परिवर्तित कर दिया है। मैं प्रत्येक रास्टर पैच के निकटतम किनारों को अलग करने वाली न्यूनतम दूरी प्राप्त करने के लिए सभी क्षेत्रों के बीच युग्मित यूक्लिडियन दूरी की गणना करना चाहता हूं। चूंकि सरणी मूल रूप से एक रास्टर था, एक समाधान को कोशिकाओं में विकर्ण दूरी के लिए खाते की आवश्यकता होती है (मैं हमेशा रास्टर रिज़ॉल्यूशन द्वारा गुणा करके कोशिकाओं में मापा गया दूरी को मीटर में बदल सकता हूं)।अद्वितीय पायथन सरणी क्षेत्रों के बीच दूरी की गणना?
मैं के रूप में this answer to a related question में सुझाव दिया scipy.spatial.distance
से cdist
समारोह के साथ प्रयोग किया गया है, लेकिन अब तक मैं उपलब्ध प्रलेखन का उपयोग कर मेरी समस्या का समाधान नहीं कर पाए थे। अंत परिणाम के रूप में, मेरे पास आदर्श रूप से क्षेत्रों के सभी संभावित संयोजनों के बीच दूरी सहित "आईडी से आईडी, दूरी" के रूप में एक्स द्वारा 3 सरणी होगी।
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')
क्या आप नमूना आउटपुट प्रदान कर सकते हैं? –
पूरी तरह से ऊपर सरणी के माध्यम से जाने के बिना, पहले कुछ परिणामों का एक नमूना आदर्श रूप से [इस तरह कुछ] देखेंगे (http://i.imgur.com/HE7YTmG.jpg?1), पहले स्तंभ के साथ " "क्षेत्र, दूसरा" टू "क्षेत्र, और तीसरा" दूरी "कॉलम। विशिष्ट परिणाम निश्चित रूप से दूरी की गणना करने के लिए उपयोग किए गए एल्गोरिदम के आधार पर भिन्न हो सकते हैं, लेकिन उस ballpark में कुछ है जो मैं बाद में हूं। –