6

A (次元 M x N) と B (N x P) の 2 つのマトリックスがあります。実際、それらはベクトルのコレクションです - A の行ベクトル、B の列ベクトルです。すべてのペアのコサイン類似度スコアを取得したいab、ここで、aは行列 A からのベクトル (行) であり、bは行列からのベクトル (列) です。 B.

行列を乗算することから始めました。これにより、行列C(次元 M x P) が得られます。

C = A*B

ただし、コサイン類似度スコアを取得するには、各値C(i,j)を対応する 2 つのベクトルのノルムで割る必要があります。Matlabでこれを行う最も簡単な方法を提案できますか?

4

1 に答える 1

5

最も単純な解決策は、最初に要素ごとの乗算と目的の次元に沿った合計を使用してノルムを計算することです。

normA = sqrt(sum(A .^ 2, 2));
normB = sqrt(sum(B .^ 2, 1));

normAnormBは、それぞれ列ベクトルと行ベクトルになりました。とで対応する要素を分割するにはA * B、次のように使用します。normAnormBbsxfun

C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB);
于 2013-01-15T14:59:36.520 に答える