2013-04-22 26 views
9

welche besser ist, unter Verwendung aller *fun Funktionen (arrayfun, cellfun, structfun und spfun) oder einfach for-Schleife?Matlab: arrayfun, cellfun, spfun und structfun vs. einfache for-Schleife

Welche Methode bietet eine bessere Leistung und welche Methoden sollten in Bezug auf die Lesbarkeit des Codes als bessere Praxis betrachtet werden?

+4

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) –

+2

auch verwandt [Antwort] (http://stackoverflow.com/a/15181321/1714410) – Shai

+0

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

Antwort

16

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 :)