哪一个更好,使用所有*fun
函数(arrayfun
,cellfun
,structfun
和spfun
)或仅使用for
循环?
在代码的可读性方面,哪种方法可以提供更好的性能,哪种方法应该被视为更好的实践?
答案 0 :(得分:17)
这实际上取决于你所谓的'表现':)
如果你的意思是最短执行时间,那么,有时*fun
更快(例如,cellfun('isempty', ...);
(是的,字符串参数!)肯定胜过循环版本) 。有时循环更快。如果您使用的是Matlab版本< 2006年,默认情况下转到*fun
个功能。如果您处于最新状态,请默认选择循环。您仍然需要进行分析以找出哪一个更快。
如Amro所述,如果你有一个能够进行FP算术的GPU,以及支持GpGPU的最新版本的Matlab,那么对arrayfun
输入的gpuArray
的调用将被大规模并行化。但是,没有关于执行时间的一般性陈述;对于较小的阵列,或者绝对是幽默的阵列,将所有内容复制到GPU上的开销可能会消除并行计算的任何好处,因此......分析确实是唯一可以确定的方法。
如果您的意思是最小编码时间,那么只要操作很简单,我就会说*fun
代码编码通常会更快。对于任何复杂的事情,通常更好的是循环。
如果您的意思是最佳可读性,因此维护和实施专业环境中的变更所需的最短时间,请务必进行循环。
目前,对你的问题没有一个明确的简单答案:)