Python 使用欧几里德距离在numpy数组列表中查找numpy数组的最近邻
我有一个n维向量,我想用欧几里德距离在n维向量列表中找到它的k个最近邻 我编写了下面的代码(k=10),虽然可以运行,但运行速度太慢,我想知道是否有更理想的解决方案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的 一个小例子是 许多人似乎对
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。