2013-01-15 25 views
5

2つの行列A(次元M×N)とB(N×P)を持っています。実際には、それらはベクトルの集合であり、Aの列ベクトル、Bの列ベクトルです。abのコサイン類似度スコアを取得したい場合、aは行列Aからのベクトル(行)で、bはベクトル行列Bを計算します。2つの行列を使ってコサイン類似度を計算する方法

行列を掛け算することから始めました。行列C(次元M x P)になりました。

C = A * B

しかし、余弦類似性スコアを得るために、私は2つの対応するベクトルのノルムによって各値C(i,j)を分割する必要があります。 Matlabでこれを行う最も簡単な方法を提案できますか?

+0

normAnormBA * Bで対応する要素を分割するには、そのようなbsxfunを使うのか? – Nemo

答えて

5

最も簡単な解決策は、所望の寸法に沿って第1のノルムを計算する要素毎の乗算と加算を使用して次のようになります

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

normAnormBは、それぞれ、今列ベクトルと列ベクトルです。 http://octave.sourceforge.net/statistics/function/pdist.htmlについてどのように

C = bsxfun(@rdivide, bsxfun(@rdivide, A * B, normA), normB); 
+0

ありがとうございますが、私は規範の平方根を使うべきだと思います。 –

+0

@ジョンマンクああ、忘れてしまった。一定。 –

関連する問題