Python 使用欧几里德距离在numpy数组列表中查找numpy数组的最近邻

Python 使用欧几里德距离在numpy数组列表中查找numpy数组的最近邻,python,arrays,algorithm,numpy,nearest-neighbor,Python,Arrays,Algorithm,Numpy,Nearest Neighbor,我有一个n维向量,我想用欧几里德距离在n维向量列表中找到它的k个最近邻 我编写了下面的代码(k=10),虽然可以运行,但运行速度太慢,我想知道是否有更理想的解决方案 def nearest_neighbors(value, array, nbr_neighbors=1): return np.argsort(np.array([np.linalg.norm(value-x) for x in array]))[:nbr_neighbors] 使用scipy的 一个小例子是 许多人似乎对

我有一个n维向量,我想用欧几里德距离在n维向量列表中找到它的k个最近邻

我编写了下面的代码(k=10),虽然可以运行,但运行速度太慢,我想知道是否有更理想的解决方案

def nearest_neighbors(value, array, nbr_neighbors=1):
    return np.argsort(np.array([np.linalg.norm(value-x) for x in array]))[:nbr_neighbors]
使用scipy的

一个小例子是


许多人似乎对性能表示不满,并推荐(links sklearn.neights,它在内部使用此链接)

正如sascha所说,我最终使用了scipy库(但使用了
近邻法),将计算时间从50小时减少到36分钟。这是一种我不应该尝试自己重新实现的计算,因为专用库对此进行了优化

nearestneights
方法还允许您传入值列表,并为每个值返回k个最近邻

最终代码是:

def nearest_neighbors(values, all_values, nbr_neighbors=10):
    nn = NearestNeighbors(nbr_neighbors, metric='cosine', algorithm='brute').fit(all_values)
    dists, idxs = nn.kneighbors(values)

你应该选择他的答案作为答案,并将其作为结束编辑添加到你的帖子中。这只适用于二维数据。更高的维度将不适用于比KDTree快得多的workSciPy。