我已经了解了以下内容。
我必须写一个函数,它取一个向量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_similarity
与np.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)
可以很容易地获得它。