计算矩阵中的所有余弦相似度

Compute all cosine similarities in a matrix

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

我的问题是双重的:

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

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

    [= 计算每个相似度33=]

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)

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