Dipende molto da quello che si chiama 'prestazioni' :)
Se vuoi dire tempo minimo di esecuzione, bene, a volte *fun
sono più veloci (ad esempio, cellfun('isempty', ...);
(sì, argomento stringa!) Per certo batte la versione loop). A volte un ciclo è più veloce. Se sei su una versione Matlab < 2006, vai per le funzioni *fun
per impostazione predefinita. Se fai qualcosa di più recente, vai per i loop di default. Dovrai sempre avere un profilo per scoprire quale è più veloce.
Come notato da Amro, se si dispone di una GPU in grado di fare FP aritmetica, e una versione recente di Matlab che supporta GPGPU, quindi una chiamata a arrayfun
per gpuArray
ingressi sarà massicciamente-parallelizzato. Tuttavia, nessuna dichiarazione generale può essere fatta riguardo al tempo di esecuzione; per gli array più piccoli, o assolutamente humungous, il sovraccarico di copiare tutto sulla GPU potrebbe annullare qualsiasi vantaggio nel parallelizzare i calcoli, quindi ... il profiling è davvero l'unico modo per saperlo con certezza.
Se intendi tempo di codifica minimo, allora direi che di solito è più veloce codificare in termini di *fun
finché le operazioni sono semplici. Per qualcosa di complesso, di solito è meglio andare per il ciclo.
Se vuoi dire ottimale leggibilità e quindi tempo minimo necessario per la manutenzione e l'implementazione di cambiamenti in un contesto professionale, di sicuro, andare per il ciclo.
A questo punto nel tempo, non c'è davvero una risposta semplice chiara alla sua domanda :)
fonte
2013-04-22 10:06:12
questione connessa: [arrayfun può essere significativamente più lento di un ciclo esplicito in MATLAB. Perché?] (Http://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why) –
ha anche una relazione [risposta] (http://stackoverflow.com/a/15181321/1714410) – Shai
Direi che dipende molto da quale versione di MATLAB si sta verificando. Nel mio caso, MATLAB R2012a, sto facendo uso di quasi solo cicli 'for' – fpe