python3:从列表中找到最近k个最近的向量?

时间:2018-02-19 09:07:23

标签: python-3.x

说我有一个向量v1和一个向量l1列表。我希望从k中找到l1向量,这些向量与v1的关闭最为封闭(类似)。

我有一个函数sim_score(v1,v2),对于任何两个输入向量,它将返回0到1之间的相似度分数。

实际上,一种天真的方式是在for上写一个l1循环,计算距离并将它们存储到另一个列表中,然后对输出列表进行排序。但有没有Pythonic方法来完成任务?

由于

2 个答案:

答案 0 :(得分:1)

import numpy as np

np.sort([np.sqrt(np.sum(( l-v1)*(l-v1))) For l in l1])[:3]

答案 1 :(得分:1)

考虑使用scipy.spatial.distance模块进行距离计算。它支持最常见的指标。

import numpy as np
from scipy.spatial import distance


v1 = [[1, 2, 3]]

l1 = [[11, 3, 5], 
      [ 2, 1, 9], 
      [.1, 3, 2]]

# compute distances
dists = distance.cdist(v1, l1, metric='euclidean')

# sorted distances
sd = np.sort(dists)

请注意,cdist的每个参数都必须是二维的。因此,v1必须是嵌套列表,或者是2d numpy数组。

您也可以使用自己开发的指标,如:

def my_metric(a, b, **kwargs):
    # some logic


dists = distance.cdist(v1, l1, metric=my_metric)