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

Joh*_*nak 5 matlab matrix cosine-similarity

我有两个矩阵,A(维度M x N)和B(N x P).实际上,它们是矢量的集合-以行向量,列向量中B.我想获得对于每对余弦相似性得分ab,其中a是从矩阵A的向量(行)和b从矩阵的向量(列) B.

我已经开始乘以矩阵,这导致矩阵C(维数M x P).

C = A*B.

然而,为了获得余弦相似性得分,我需要将每个值除以C(i,j)两个相应矢量的范数.你能在Matlab中建议最简单的方法吗?

Eit*_*n T 5

最简单的解决方案是首先使用沿所需维度的逐元素乘法和求和来计算规范:

normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));
Run Code Online (Sandbox Code Playgroud)

normAnormB现在的列向量和行向量,分别.要在A * Bby normA和中划分相应的元素normB,请使用bsxfun如下:

C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);
Run Code Online (Sandbox Code Playgroud)