我有一个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]
我有一个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]
NearestNeighbors
方法),将计算时间从50小时缩短到了36分钟。这种计算我不应该尝试自己重新实现,因为专用库对此进行了更多的优化。
NearestNeighbors
方法还允许您传入值列表,并返回每个值的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)