【问题标题】:finding nearest points in python在python中找到最近的点
【发布时间】:2015-09-09 13:13:15
【问题描述】:

我最近开始使用 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 中最近(欧几里得距离)的点进行分组。

例如,对于X([1,2]) 的第一个元素,距离C 最近的点是C( [1,1]) 的第一个元素,

X ([1,3]) 的第二个元素 - 又是C([1,1]) 的第一个元素

...

X([9,11]) 中的最后一个元素 - C([10,10]) 中的第二个元素

所以[1,1] 是最接近X 的3 个点的元素,而[10, 10] 是最接近X 的5 个元素的元素。

我想要一个 python F(C,X) 中的函数,它将为 C 的每个元素返回 X 中与 C 的这个元素最近的元素的数量。所以在这个例子中它应该返回[3,5]

我可以编写自己的函数,但它不会有效,所以我有兴趣在 Python 中是否有任何预定义的函数来解决我的问题?

谢谢

【问题讨论】:

标签: python arrays


【解决方案1】:

可能会有更快的速度,但这样做可以:

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]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多