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?
Richtig ... das Summieren der elementweisen Produkte ist schneller:
%Vor% %Vor%Wie wäre es mit Vektormultiplikation?
%Vor% 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.