2010-09-28 136 views
3

什么是fastes方法来确定在二维空间中n个点中的哪一点是距离点p最近的(最小的欧几里德距离),参见附加的行李。计算二维空间中的欧几里得距离的最快方法

alt text

计算本作点P的m个时我目前在Python中,这是存储在一个列表中的所有距离,然后运行

numpy.argmin(list_of_distances) 

这种方法是但有点慢。或者是?

回答

3

这属于closest point query-问题。

预计有多少点?你的观点是静态的还是改变了?对于静态点来说,一种天真但强大的方法是预先计算每个已知距离,这将导致O(1)查找。

+0

啊。谢谢。 n通常仅在10左右,但m可以在几千个范围内。然而,q的分布随着每次迭代而变化。 “预先计算每个已知距离”,这是否适用于浮点数? – Theodor 2010-09-28 11:10:06

5

除了计算距离外,还可以计算平方距离。这样你就不需要执行n * m平方根。

+0

好点,你仍然保持距离的相对顺序。 – Theodor 2010-09-28 10:54:46

+0

老游戏程序员的作弊:) – 2010-09-28 10:56:40

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) 
相关问题