【问题标题】:Compute all cosine similarities in a matrix计算矩阵中的所有余弦相似度
【发布时间】:2019-12-24 00:32:06
【问题描述】:

假设我有一个矩阵 mat 一个 100 x 200 数组。

我的问题有两个:

  1. 如何计算第一行与所有其他行的余弦相似度?我尝试使用sklearncosine_similarity 函数,但传入100 x 200 矩阵会给我一个100 x 100 数组(而不是100 x 1 数组)。

  2. 如果我想计算所有行与其他行的余弦相似度,比如说计算所有行的所有 100 C 2 = 4950 种不同组合,那么 不是 是不是最快的?使用sklearn 之类的东西,但实际上将每行的规范存储为np.linalg.norm,然后通过cos_sim = dot(a, b)/(norm(a)*norm(b)) 计算每个相似度?

【问题讨论】:

    标签: python numpy scikit-learn vectorization cosine-similarity


    【解决方案1】:

    1-尝试:

    cosines = (numpy.inner(mat[0], mat) / (numpy.linalg.norm(mat[0]) * numpy.linalg.norm(mat, axis=1)))
    

    2- 你可以检查前面的代码来做类似的事情,知道

    numpy.linalg.norm(mat, axis=1)
    

    计算所有向量的范数,然后每一步乘以当前范数。 还有

    numpy.inner(mat, mat)
    

    会给你一个矩阵内积的对称矩阵。

    【讨论】:

      猜你喜欢
      • 2014-03-25
      • 2016-10-22
      • 2019-04-22
      • 2019-04-07
      • 1970-01-01
      • 2015-07-21
      • 2019-02-10
      • 1970-01-01
      • 2021-08-20
      相关资源
      最近更新 更多