【发布时间】:2016-10-22 02:12:44
【问题描述】:
我有一个 numpy 矩阵,如下所示 A
array([[1, 2, 3],
[1, 2, 2]])
我想找到这个矩阵的余弦相似度矩阵,其中余弦相似度在列之间。
现在两个向量的余弦相似度只是两个由每个向量的 L2 范数积归一化的点积
但我不想在循环中对每一列进行迭代并执行此操作。
所以我首先尝试了这个:
from scipy.spatial import distance
cos=distance.cdist(a.T,a.T,'cosine')
这里我采用转置,否则它会做行的余弦(观察)。我想要列。
但是我不确定这是正确的答案。这个函数的文档说它给出了 1- cosine_similarity。那我应该怎么做?
cos-1-distance.cdist(a.T,a.T,'cosine')
请指教。
二)
如果我尝试这样做:
cos=(np.dot(a.T,a))/(np.linalg.norm(a, axis=0, keepdims=True))*(np.linalg.norm(a, axis=0, keepdims=True))
在获得右列的正确 L2 范数时不会出现问题。知道我们如何在没有函数的情况下实现它吗?
【问题讨论】: