如何在一组点中找到最接近另一个的点?

时间:2019-02-28 15:44:55

标签: python coordinates

说我有X,Y点的列表。然后,我添加一个新点,我如何找出新添加的点也最接近哪个旧点?我已经看到了一些类似的问题,但无济于事。我正在寻找类似的东西:

pnts = [[11145,1146], [11124,1155], [11212,1147], etc]
new_pnt = [11444, 1160]
new_pnt.closest()

我尝试了scipy和KDTree,并不断遇到各种错误。对Python来说是全新的,将不胜感激。

2 个答案:

答案 0 :(得分:1)

最简单,最快捷的方法是为您定义一个函数,以测量到每个点的距离并返回最接近的点。例如(假设欧氏距离):

>>> pnts = [[11145,1146], [11124,1155], [11212,1147]]
>>> new_pnt = [11444, 1160]
>>> def closest(points, new_point):
    closest_point = None
    closest_distance = None
    for point in points:
        distance = ((point[0] - new_point[0])**2 + (point[1] - new_point[1])**2)**0.5
        if closest_distance is None or distance < closest_distance:
            closest_point = point
            closest_distance = distance
    return closest_point

>>> closest(pnts, new_pnt)
[11212, 1147]

答案 1 :(得分:1)

您有NumPy吗?如果是这样:

import numpy as np
index = np.argmin(np.sum((np.array(pnts) - np.array(new_pnt))**2, axis=1))
print(index)  # 2

也就是说,点pnts[2]最接近new_pnt。距离由一对x和y坐标之差之和的平方根给出。这里我省略平方根,因为距离平方最小的点也是距离最小的点。