Octave / Matlab: Effiziente Berechnung von Frobenius inner product?

8

Ich habe zwei Matrizen A und B und was ich bekommen möchte ist:

%Vor%

Wenn ich mich nicht irre, heißt das Frobenius Inner Product .

Hier geht es mir um Effizienz. Ich habe nur Angst, dass dieser geradlinige Ansatz zuerst die ganze Multiplikation (meine Matrizen sind Tausende von Zeilen / Spalten) und nur dann die Spur des Produkts nehmen wird, während die Operation, die ich wirklich brauche, viel einfacher ist. Gibt es dafür eine Funktion oder eine Syntax?

    
izhak 07.11.2011, 00:44
quelle

3 Antworten

5

Richtig ... das Summieren der elementweisen Produkte ist schneller:

%Vor% %Vor%     
John Colby 07.11.2011, 01:18
quelle
2

sum(sum(A.*B)) vermeidet die vollständige Matrixmultiplikation

    
stardt 07.11.2011 01:19
quelle
1

Wie wäre es mit Vektormultiplikation?

%Vor%

Laufzeitprüfung

Vergleichen von vier Optionen mit A und B der Größe 1000-by-1000:
1. Vektor inneres Produkt: A(:)'*B(:) (diese Antwort) nahm nur 0.0011 sec .
2. Mit elementweiser Multiplikation sum(sum(A.*B)) ( John 's Antwort) nahm 0.0035 sec .
3. Trace trace(A*B') (vorgeschlagen von OP) hat 0.054 sec übernommen.
4. Summe der Diagonale sum(diag(A*B')) (Option abgelehnt von John ) nahm 0.055 sec .

Nehmen Sie die Nachricht mit nach Hause: Matlab ist äußerst effizient, wenn es um Matrix / Vektor-Produkte geht. Die Verwendung von vector inner product ist x3 mal schneller als die effiziente elementweise Multiplikationslösung.

Benchmarkcode Code, der verwendet wird, um die Laufzeitprüfungen bereitzustellen

%Vor%

Sie können diesen Benchmark jetzt in einem Klick ausführen.

    
Shai 27.05.2013 04:19
quelle

Tags und Links