如何使用两个矩阵计算余弦相似度

时间:2013-01-15 14:50:57

标签: matlab matrix cosine-similarity

我有两个矩阵,A(尺寸M x N)和B(N x P)。实际上,它们是向量的集合 - A中的行向量,B中的列向量。我想获得每对ab的余弦相似度分数,其中a是向量来自矩阵A的(行)和b是来自矩阵B的向量(列)。

我首先将矩阵相乘,得到矩阵C(维数M x P)。

  

C = A * B

然而,为了获得余弦相似度得分,我需要将每个值C(i,j)除以两个相应向量的范数。你能在Matlab中建议最简单的方法吗?

1 个答案:

答案 0 :(得分:5)

最简单的解决方案是首先使用沿所需维度的逐元素乘法和求和来计算规范:

normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));

normAnormB现在分别是列向量和行向量。要按A * BnormA划分normB中的相应元素,请使用bsxfun,如下所示:

C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);