使用Python,所以我的实际问题是从一个数组(数千个点)中计算出最接近的2D点,该数组代表了到给定点(汽车位置)的路网坐标。此计算需要每个0.2秒的时间戳(在线)。在检查closest pair of point problem algorithm时,它会找到某个数组中的最接近点,而不是像我愿意找到的那样相对于给定点。 是否有人熟悉python实现或合适的算法?欢迎任何帮助。
答案 0 :(得分:0)
如果您的数据是无序的,那么您将没有其他选择,只能检查数组的每个点。
如果您的数据按升序/降序排列(例如通过坐标),则可以以此为基础进行搜索。例如,注释中建议的二进制搜索。
如果您的数据代表道路网络,并且数据结构类似于该网络的真实2D拓扑,则可以利用它并保持“指针”到您的当前位置,然后仅探索该道路的周围环境该位置,然后在当前位置附近找到您的位置。
编辑:还有一点:如果您需要比较距离以确定最接近的距离(可能使用毕达哥拉斯来计算欧氏距离),则不必计算根,也可以比较二次距离,而这将节省一些操作(如果您经常进行操作,则可以快速总结出来)
答案 1 :(得分:0)
感谢大家-以下是我的解决方法(语法之一):
import numpy as np
from sklearn.neighbors import KDTree
np.random.seed(0)
samples = np.random.uniform(low=0, high=500, size=(1000000, 2))
samples.sort(kind='quicksort')
tree = KDTree(samples)
car_location = np.array([[200, 300]])
closest_dist, closest_id = tree.query(car_location, k=1) # closest point with respect to the car location
print(samples)
print("The car location is: ", car_location)
print("The closest distance is: ", closest_dist)
print("The closest point is: ", samples[closest_id])
输出:
[[ 274.40675196 357.59468319]
[ 272.4415915 301.38168804]
[ 211.82739967 322.94705653]
...,
[ 276.40594173 372.59594432]
[ 464.17928848 469.82174863]
[ 245.93513736 445.84696018]]
The car location is: [[200 300]]
The closest distance is: [[ 0.31470178]]
The closest point is: [[[ 199.72906435 299.8399029 ]]]
ChrisN-以上是您的第二个建议的解决方案。您的第3个声音绝对是更好的计算解决方案。但是,我认为我的解决方案将满足所需的问题。如果没有,我将尝试发布第三种解决方案。 tnx!