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

6
我有两个矩阵,A(大小为M x N)和B(大小为N x P)。实际上,它们是向量的集合——A中是行向量,B中是列向量。我想要为每对a和b(其中a是来自矩阵A的向量(行),b是来自矩阵B的向量(列))获取余弦相似度分数。 我已经通过矩阵乘法开始了这个过程,得到矩阵C(大小为M x P)。
C = A*B
然而,为了获得余弦相似度分数,我需要将C(i,j)的每个值除以其对应向量的范数。您能否建议在Matlab中最简单的方法?

那么 http://octave.sourceforge.net/statistics/function/pdist.html 怎么样? - Nemo
我利用 https://octave.sourceforge.io/statistics/function/pdist2.html 来解决了同样的问题。 - Enrico Cupellini
2个回答

5
最简单的解决方案是首先使用按元素乘法和沿所需维度的求和来计算规范:
normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));

normAnormB 现在分别是列向量和行向量。要通过 bsxfunA * B 中对应的元素除以 normAnormB,请采用下面的方法:

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

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接