Matlab:arrayfun,cellfun,spfun和structfun与简单的for循环

时间:2013-04-22 09:10:57

标签: matlab for-loop

哪一个更好,使用所有*fun函数(arrayfuncellfunstructfunspfun)或仅使用for循环?

在代码的可读性方面,哪种方法可以提供更好的性能,哪种方法应该被视为更好的实践?

1 个答案:

答案 0 :(得分:17)

这实际上取决于你所谓的'表现':)

如果你的意思是最短执行时间,那么,有时*fun更快(例如,cellfun('isempty', ...);(是的,字符串参数!)肯定胜过循环版本) 。有时循环更快。如果您使用的是Matlab版本< 2006年,默认情况下转到*fun个功能。如果您处于最新状态,请默认选择循环。您仍然需要进行分析以找出哪一个更快。

如Amro所述,如果你有一个能够进行FP算术的GPU,以及支持GpGPU的最新版本的Matlab,那么对arrayfun输入的gpuArray的调用将被大规模并行化。但是,没有关于执行时间的一般性陈述;对于较小的阵列,或者绝对是幽默的阵列,将所有内容复制到GPU上的开销可能会消除并行计算的任何好处,因此......分析确实是唯一可以确定的方法。

如果您的意思是最小编码时间,那么只要操作很简单,我就会说*fun代码编码通常会更快。对于任何复杂的事情,通常更好的是循环。

如果您的意思是最佳可读性,因此维护和实施专业环境中的变更所需的最短时间,请务必进行循环。

目前,对你的问题没有一个明确的简单答案:)