Python - 给定 X,Y 点对的库函数找到 Xn, Yn,这是最接近该对的对

Python - Library function that given a X,Y pair of point find Xn, Yn which is the closest pair to that pair

免责声明:我正在寻找一个库或实现此目的的现有函数。类似的问题询问我正在寻找快速实现的基本算法。所以如果这似乎是一个重复的问题,我会道歉,因为我只是在寻找一个黑框答案

给定一对地理坐标点:

[34.232,-119.123]

以及其他点的数组:

[ [36.232,-117.123], [35.232,-119.123], [33.232,-112.123] ]

我正在寻找一个函数,它 return 上面列表中最接近原始坐标的一对

从简单整数编辑为浮点值

每条评论:

from scipy.spatial.distance import cdist
import numpy as np

def closest(point, ref):
    dist = cdist(ref, [point])
    return ref[np.argmin(dist)]

point = [1,2]
ref = [ [3,1], [4,1], [2,5] ]

closest(point,ref)
# out [3,1]

我的两分钱:

from scipy.spatial.distance import euclidean
from functools import partial

key = partial(euclidean, [1,2])

lst = [[3, 1], [4, 1], [2, 5]]
res = min(lst, key=key)
print(res)

输出

[3, 1]

还有一个:

from sklearn.neighbors import KDTree
import numpy as np

X = np.array([[3,1], [4,1], [2,5]])

tree = KDTree(X, leaf_size=2)

dist, ind = tree.query(np.array([1,2]).reshape(1,-1), k=1) 

X[ind][0][0]

# array([3, 1])

对欧氏距离使用 numpy 范数

def fun(x, points):
  points = np.array(points)
  return points[np.argmin(np.linalg.norm(points-np.array(x), axis=1))]

print (fun([1,2], [[3,1], [4,1], [2,5]]))
print (fun([1,2], [[3,1], [2,1], [2,5]]))

输出:

[3 1]
[2 1]