我有两个矩阵,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 中执行此操作的最简单方法吗?
我有两个矩阵,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 中执行此操作的最简单方法吗?
最简单的解决方案是首先使用元素乘法和沿所需维度求和来计算范数:
normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));
normA
和normB
现在分别是列向量和行向量。A * B
用normA
and划分对应的元素normB
,使用bsxfun
如下:
C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);