# [Solved] How to compute cosine similarity using two matrices

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` and `b`, where `a` is a vector (row) from matrix A and `b` 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?

## Solution #1:

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);
``````

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .