Generalisiertes Matrixprodukt

8

Ich bin ziemlich neu bei MATLAB. Normale Matrixmultiplikation einer M x K-Matrix mit einer K x N-Matrix - C = A * B - hat c_ij = sum(a_ik * b_kj, k = 1:K) . Was, wenn ich möchte, dass dies stattdessen c_ij = sum(op(a_ik, b_kj), k = 1:K) für eine einfache binäre Operation op ist? Gibt es eine schöne Möglichkeit, dies in MATLAB zu vektorisieren (oder vielleicht sogar eine eingebaute Funktion)?

EDIT: Das ist derzeit das Beste, was ich tun kann.

%Vor%     
Nick 08.11.2011, 22:23
quelle

4 Antworten

2

In diesem Beitrag ist ein vektorisierter Ansatz aufgeführt, der mit bsxfun fortbesteht, indem Sie permute , um Singleton-Dimensionen nach Bedarf von bsxfun zu erstellen, damit singleton-expansion dies tun kann arbeiten und damit die Schleife im ursprünglichen Beitrag im Wesentlichen ersetzen. Bitte denken Sie daran, dass bsxfun eine speicherhungrige Implementation ist, also erwarten Sie eine Beschleunigung nur solange, bis sie zu weit gestreckt ist. Hier ist der endgültige Lösungscode -

%Vor%

Hinweis: Die obige Lösung wurde von Entfernen von vier verschachtelten Schleifen in Matlab inspiriert.

    
Divakar 14.06.2014 17:14
quelle
1

wenn der Operator elementweise arbeiten kann (wie .* ):

%Vor%     
Batsu 09.11.2011 00:12
quelle
0

Sie können die Schleifen immer selbst schreiben:

%Vor%     
Amro 08.11.2011 23:41
quelle
0

Abhängig von Ihren spezifischen Anforderungen können Sie bsxfun in 3D verwenden, um den Binäroperator auszutricksen. Siehe diese Antwort für weitere Informationen: Ссылка Eine andere Alternative wäre cellfun mit einer benutzerdefinierten Funktion zu verwenden: Ссылка

    
gaborous 14.06.2014 16:10
quelle