Meine Frage: Ich habe festgestellt, dass viele gute Antworten auf Matlab-Fragen zu SO häufig die Funktion verwenden bsxfun
. Warum?
Motivation: In der Matlab-Dokumentation für bsxfun
finden Sie das folgende Beispiel:
A = magic(5);
A = bsxfun(@minus, A, mean(A))
Natürlich könnten wir den gleichen Vorgang ausführen mit:
A = A - (ones(size(A, 1), 1) * mean(A));
Tatsächlich zeigt ein einfacher Geschwindigkeitstest, dass die zweite Methode etwa 20% schneller ist. Warum also die erste Methode anwenden? Ich vermute, es gibt einige Umstände, unter denen die Verwendung bsxfun
viel schneller ist als der "manuelle" Ansatz. Es würde mich wirklich interessieren, ein Beispiel für eine solche Situation und eine Erklärung zu sehen, warum es schneller ist.
Ein letztes Element zu dieser Frage, ebenfalls aus der Matlab-Dokumentation für bsxfun
: "C = bsxfun (fun, A, B), wendet die Element-für-Element-Binäroperation, die durch das Funktionshandle fun angegeben ist, auf Arrays A und B mit Singleton an Erweiterung aktiviert. ". Was bedeutet der Ausdruck "mit aktivierter Singleton-Erweiterung"?
timeit
Funktion in dem Link gelesen habe, den Sie / Angainor / Dan bereitstellen.
tic...toc
um die Zeilen setzen, hängt die Geschwindigkeit des Codes davon ab, dass Funktionen in den Speicher eingelesen werden müssen.