How to compute cosine similarity using two matrices
The simplest solution would be computing the norms first using element-wise multiplication and summation along the desired dimensions:
normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));
normA
and normB
are now a column vector and row vector, respectively. To divide corresponding elements in A * B
by normA
and normB
, use bsxfun
like so:
C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);
John Manak
Updated on September 15, 2022Comments
-
John Manak over 1 year
I have two matrices, A (dimensions M x N) and B (N x P). In fact, they are collections of vectors - row vectors in A, column vectors in B. I want to get cosine similarity scores for every pair
a
andb
, wherea
is a vector (row) from matrix A andb
is a vector (column) from matrix B.I have started by multiplying the matrices, which results in matrix
C
(dimensions M x P).C = A*B
However, to obtain cosine similarity scores, I need to divide each value
C(i,j)
by the norm of the two corresponding vectors. Could you suggest the easiest way to do this in Matlab?