计算二维空间中欧氏距离的最快方法

时间:2010-09-28 10:00:58

标签: python optimization distance

确定2D空间中n个点中的哪个点与点p最接近(最小的欧几里德距离)的最佳方法是什么,见附加的附加信息。

alt text

我目前在Python中执行此操作的方法是将所有距离存储在列表中,然后运行

numpy.argmin(list_of_distances)

然而,当计算m个点数p时,这有点慢。或者是吗?

3 个答案:

答案 0 :(得分:5)

您可以计算平方距离,而不是计算距离。这样你就不需要执行n * m平方根。

答案 1 :(得分:3)

这属于closest point query - 问题。

预计会有多少分?您的积分是静态还是变化?静态点的一种天真但强大的方法是预先计算每个已知距离,这将导致O(1)查找。

答案 2 :(得分:1)

尽快将所有内容放入numpy并在那里进行计算。如果你有很多点,它比计算列表中的距离要快得多:

import numpy as np

px, py
x = np.fromiter(point.x for point in points, dtype = np.float)
y = np.fromiter(point.y for point in points, dtype = np.float)

i_closest = np.argmin((x - px) ** 2 + (y - py) ** 2)