我最近开始使用Python,所以这可能是一个愚蠢的问题,但无论如何:
我有两个数组C
和X
。每个数组元素都是二维点。
例如:
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中有任何预定义函数吗?
谢谢
答案 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]