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% 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 -
Hinweis: Die obige Lösung wurde von Entfernen von vier verschachtelten Schleifen in Matlab inspiriert.
Tags und Links matlab vectorization matrix-multiplication bsxfun