Matlab 如何利用两个矩阵计算余弦相似度
我有两个矩阵,A(维M×N)和B(N×p)。事实上,它们是向量的集合-A中的行向量,B中的列向量。我想得到每对Matlab 如何利用两个矩阵计算余弦相似度,matlab,matrix,cosine-similarity,Matlab,Matrix,Cosine Similarity,我有两个矩阵,A(维M×N)和B(N×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)
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
和normB
,请使用以下类似方法:
怎么样
C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);