2013-01-15 9 views
5

Ich habe zwei Matrizen, A (Dimensionen M x N) und B (N x P). Tatsächlich sind sie Sammlungen von Vektoren - Zeilenvektoren in A, Spaltenvektoren in B. Ich möchte für jedes Paar a und b Werte für die Kosinusähnlichkeit erhalten, wobei a ein Vektor (Zeile) aus Matrix A ist und b ein Vektor ist (Spalte) von Matrix B.So berechnen Sie Kosinusähnlichkeit mit zwei Matrizen

Ich habe angefangen, indem ich die Matrizen multipliziere, die Matrix C ergibt (Maße M x P).

C = A * B

jedoch Cosinus Ähnlichkeitswerte zu erhalten, muss ich jeden Wert dividieren C(i,j) durch die Norm der beiden entsprechenden Vektoren. Können Sie den einfachsten Weg vorschlagen, dies in Matlab zu tun?

+0

Wie wäre es http://octave.sourceforge.net/statistics/function/pdist.html? – Nemo

Antwort

5

Die einfachste Lösung wäre es, die Normen der Berechnung unter Verwendung von erster elementweise Multiplikation und Summation entlang der gewünschten Abmessungen:

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

normA und normB ist nun ein Spaltenvektor und Zeilenvektor, respectively. So teilen entsprechende Elemente in A * B von normA und normB verwenden bsxfun wie so:

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

Vielen Dank, aber ich denke, dass die Quadratwurzel der Normen verwendet werden sollte. –

+0

@JohnManak Ach ja, das habe ich vergessen. Fest. –