Es hängt wirklich davon ab, was Sie nennen 'Leistung' :)
Wenn Sie minimale Ausführungszeit bedeuten, na ja, manchmal *fun
sind schneller (zB cellfun('isempty', ...);
(ja, String-Argument!) Sicher Beats die Schleifenversion). Manchmal ist eine Schleife schneller. Wenn Sie auf einer Matlab-Version < 2006 sind, gehen Sie für die *fun
Funktionen standardmäßig. Wenn Sie etwas jüngeres suchen, wählen Sie standardmäßig die Loops. Sie müssen immer noch profilieren, um herauszufinden, welche schneller ist.
Wie Amro erwähnt, wenn Sie eine GPU FP Arithmetik dazu in der Lage haben, und eine aktuelle Version von Matlab, die GPGPU unterstützt, dann wird ein Aufruf an arrayfun
für gpuArray
Eingänge werden massiv parallelisiert. Es können jedoch keine allgemeinen Aussagen über die Ausführungszeit gemacht werden; Für kleinere Arrays oder absolut humante, könnte der Overhead, alles auf die GPU zu kopieren, den Vorteil der Parallelisierung der Berechnungen zunichte machen, also ... Profiling ist wirklich die einzige Möglichkeit, dies sicher zu wissen.
Wenn Sie Minimum Codierung Zeit meinen, dann würde ich sagen, es ist in der Regel schneller zu Code in *fun
Code, solange die Operationen einfach sind. Für etwas Komplexes ist es normalerweise besser, für die Schleife zu gehen.
Wenn Sie meinen, optimale Ablesbarkeit und damit Mindestzeitaufwand für die Wartung und Umsetzung von Veränderungen im beruflichen Kontext, sicher, für die Schleife gehen.
Zu diesem Zeitpunkt ist es nicht wirklich eine klare einfache Antwort auf Ihre Frage :)
Verwandte Frage: [arrayfun deutlich langsamer als eine explizite Schleife in Matlab sein kann. Warum?] (Http://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why) –
auch verwandt [Antwort] (http://stackoverflow.com/a/15181321/1714410) – Shai
Ich würde sagen, dass es ziemlich viel hängt davon ab, welche MATLAB-Version du gerade machst. In meinem Fall, MATLAB R2012a, verwende ich fast nur "for" loops – fpe