我有两个矩阵,A(尺寸 M x N)和 B(N x P)。事实上,它们是向量的集合 - A 中的行向量,B 中的列向量。我想获得每对的余弦相似度分数a
and b
, where 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
and normB
现在分别是列向量和行向量。将相应元素划分为A * B
by normA
and normB
, use bsxfun http://www.mathworks.com/help/matlab/ref/bsxfun.html像这样:
C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)