在python中找到最近的点

时间:2015-09-09 13:13:16

标签: python arrays

我最近开始使用Python,所以这可能是一个愚蠢的问题,但无论如何:

我有两个数组CX。每个数组元素都是二维点。

例如:

C = [[1,1], [10,10]]

X = [[1,2], [1,3], [2,1], [10,11], [10,12], [11,11], [12,11], [9,11]]

我想将X中的点分组到C的最近(欧几里德距离)点附近。

例如C的{​​{1}}的最近点是X([1,2])的元素1的第一个元素,

表示C( [1,1])的第二个元素 - 再次是X ([1,3])

的第一个元素

...

表示C([1,1])中的最后一个元素 - X([9,11])

中的第二个元素

所以C([10,10])是距离[1,1]的3个点的最近元素,X距离[10, 10]的5个元素最近。

我想在python X中使用一个函数,该函数将返回F(C,X)的每个元素,C的元素数量X最接近的元素数。因此,在此示例中,它应返回C

我可以编写自己的函数,但它不会有效,所以我很感兴趣,如果我的问题在Python中有任何预定义函数吗?

谢谢

1 个答案:

答案 0 :(得分:0)

可能会更快,但这样做的工作:

import numpy as np

C = [[1,1], [10,10]]
X = [[1,2], [1,3], [2,1], [10,11], [10,12], [11,11], [12,11], [9,11]]

def F(C,X):
    Carr = np.array(C)
    Xarr = np.array(X)
    distances = [np.sum( (Xarr - Carr[i])**2, axis=1) for i in range(len(C))]
    closests = np.argmin( np.array(distances), axis=0 )
    return list( np.bincount(closests) )

print(F(C,X))

将打印:

[3, 5]