【问题标题】:Calculating cosine similarity of columns of a python matrix计算python矩阵列的余弦相似度
【发布时间】: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 范数时不会出现问题。知道我们如何在没有函数的情况下实现它吗?

【问题讨论】:

    标签: python numpy matrix


    【解决方案1】:

    试试这个:

    a = np.array([[1, 2, 3], [1, 2, 2]])
    n = np.linalg.norm(a, axis=0).reshape(1, a.shape[1])
    a.T.dot(a) / n.T.dot(n)
    
    array([[ 1.        ,  1.        ,  0.98058068],
           [ 1.        ,  1.        ,  0.98058068],
           [ 0.98058068,  0.98058068,  1.        ]])
    

    n 的这个分配也可以。

    np.linalg.norm(a, axis=0)[None, :]
    

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2019-04-22
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2019-04-07
      • 2015-07-21
      • 1970-01-01
      • 2015-07-17
      相关资源
      最近更新 更多