使用Numpy的余弦相似函数



我已经了解了以下内容。

我必须写一个函数,它取一个向量x和一个向量列表,在列表中,使用余弦相似度与x最相似的向量的索引。

到目前为止,我尝试过使用以下内容,但没有成功。我对这件事很陌生,所以希望能提供帮助和解释!!

import numpy as np
def most_similar(x, v_list):
dot_product = np.dot(x, v_list)
norm_a = np.linalg.norm(x)
norm_b = np.linalg.norm(v_list)
return dot_product / (norm_a * norm_b)

sklearn.metrics.pairwise.cosine_similaritynp.argmax一起使用可能会更高效(但我没有进行任何基准测试(,我对您的代码进行了一个细微的更改:

def most_similar(x, M):
dot_product = np.dot(x, M.T)
norm_a = np.linalg.norm(x)
norm_b = np.linalg.norm(M,axis=1)
score = dot_product / (norm_a * norm_b)
return np.argmax(score)

您可能需要对列表进行迭代,但这里的参数M是一个numpy数组(每一行都是您的向量,v_list的元素(,使用np.array(v_list)可以很容易地获得它。

最新更新