计算网格上的距离

时间:2015-08-08 01:08:57

标签: python python-2.7 numpy grid distance

我有一个10 x 10的单元格(作为一个numpy数组)。我还有一个关于该网格的3个点的列表。对于网格上的每个单元格,我需要找到最接近的三个点。我可以在python(2.7)中的一系列嵌套循环中做到这一点,但它很慢(特别是如果我升级到更大的网格)但我怀疑有更快的方法。有没有人有任何建议?

3 个答案:

答案 0 :(得分:0)

我知道计算平面上两点之间距离的最简单方法是使用毕达哥拉斯定理。

即,画出一个直角三角形,其中斜边在两点之间,三角形的底边平行于x轴,高度平行于y轴。然后我们知道距离(由斜边的长度表示)h遵循以下:h ^ 2 = a ^ 2 + b ^ 2,其中a和b是三角形的两个剩余边的长度。 / p>

如果没有看到您的代码,很难提供任何其他帮助。你尝试过类似的东西吗?如果您想要更具体的答案,则需要更多地指定您的问题。

答案 1 :(得分:0)

如果我们假设您知道点坐标,那么您可以使用距离公式计算单元格与点之间的距离:https://en.wikipedia.org/wiki/Distance

例如,假设您的单元格对应于'x',而您的3个点对应于y1,y2和y3。你可以简单地得到x - y1,x - y2和x - y3之间的距离,然后比较三个距离。

如果我们假设您不知道点坐标,那么您首先必须找到点坐标。如果单元格对应于点坐标,您可以通过扫描网格和cheecking找到点坐标。找到所有点后,您可以使用公式距离找到最近的距离。

答案 2 :(得分:0)

scipi中有一个名为euclidean的函数可以计算点之间的距离,如果你想循环它们的话。

from scipy.spatial.distance import euclidean
import numpy as np

a = np.array([1, 1, 1])
b = np.array([2, 2, 2])
dist = euclidean(a, b)

但我认为对于大型数据集,您最好使用scipi' k-d tree进行搜索。