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

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(维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));
normB = sqrt(sum(B .^ 2, 1));
normA
normB
现在分别是列向量和行向量。要将
A*B
中的相应元素除以
normA
normB
,请使用以下类似方法:

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