我有两个矩阵,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中建议最简单的方法吗?
答案 0 :(得分:5)
最简单的解决方案是首先使用沿所需维度的逐元素乘法和求和来计算规范:
normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));
normA
和normB
现在分别是列向量和行向量。要按A * B
和normA
划分normB
中的相应元素,请使用bsxfun
,如下所示:
C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);