确定2D空间中n个点中的哪个点与点p最接近(最小的欧几里德距离)的最佳方法是什么,见附加的附加信息。
我目前在Python中执行此操作的方法是将所有距离存储在列表中,然后运行
numpy.argmin(list_of_distances)
然而,当计算m个点数p时,这有点慢。或者是吗?
答案 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)