Это действительно зависит от того, что вы называете «производительность» :)
Если вы имеете в виду минимальное время выполнения, ну, иногда *fun
быстрее (например, cellfun('isempty', ...);
(да, строковый аргумент!) Наверняка биений версия цикла). Иногда цикл работает быстрее. Если вы используете версию Matlab < 2006, по умолчанию выполняйте функции *fun
. Если вы находитесь в чем-то более недавнем, пойдите для циклов по умолчанию. Вам все равно придется профилировать, чтобы узнать, какой из них быстрее.
Как отметил Amro, если у вас есть графический процессор, способный делать FP арифметику, и последнюю версию Matlab, которая поддерживает GPGPU, то вызов arrayfun
для gpuArray
входов будут массово-распараллеливание. Однако никакие общие утверждения не могут быть сделаны в отношении времени выполнения; для небольших массивов или абсолютно сложных, накладные расходы на копирование всего на GPU могут отменить любую выгоду от распараллеливания вычислений, поэтому ... профилирование - это действительно единственный способ узнать наверняка.
Если вы имеете в виду минимальное кодирование времени, то я бы сказал, что это обычно быстрее кода с точки зрения *fun
, пока операции просты. Для чего-либо сложного, как правило, лучше пойти на цикл.
Если вы имеете в виду оптимальной читаемости и, таким образом минимальное время, необходимое для технического обслуживания и внедрения изменений в профессиональном контексте, наверняка, идти на петлю.
На данный момент, есть не очень отчетливый простой ответ на ваш вопрос :)
Связанный вопрос: [arrayfun может быть значительно медленнее, чем явный цикл в MATLAB. Почему?] (Http://stackoverflow.com/questions/12522888/arrayfun-can-be-significantly-slower-than-an-explicit-loop-in-matlab-why) –
также связан [ответ] (http:// /stackoverflow.com/a/15181321/1714410) – Shai
Я бы сказал, что это сильно зависит от того, какой релиз MATLAB вы угадываете. В моем случае, MATLAB R2012a, я использую почти только циклы for for – fpe