【发布时间】:2018-09-12 22:17:46
【问题描述】:
我有一个带有一组唯一 ID 补丁/区域的栅格,我已将其转换为二维 Python numpy 数组。我想计算所有区域之间的成对欧几里得距离,以获得分隔每个栅格补丁最近边缘的最小距离。由于阵列最初是一个栅格,因此解决方案需要考虑跨单元格的对角线距离(我总是可以通过乘以栅格分辨率将单元格中测量的任何距离转换回米)。
我已经按照this answer to a related question 中的建议尝试了scipy.spatial.distance 中的cdist 函数,但到目前为止,我无法使用可用的文档解决我的问题。作为最终结果,理想情况下,我将拥有一个 3 x X 数组,其形式为“从 ID,到 ID,距离”,包括所有可能的区域组合之间的距离。
这是一个类似于我的输入数据的示例数据集:
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')
【问题讨论】:
-
您能提供示例输出吗?
-
如果不详尽地遍历上面的数组,前几个结果的样本理想情况下应该是something like this,第一列代表“from”区域,第二列代表“to”区域,第三列“距离”列。具体结果当然会根据用于计算距离的算法而有所不同,但我所追求的是那个球场中的一些东西。
标签: python arrays numpy scipy distance