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

Sha*_*hai 9 matlab for-loop

哪一个更好,使用所有的*fun功能(arrayfun,cellfun,structfunspfun),或者干脆利用for循环?

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

Rod*_*uis 17

这真的取决于你所谓的'性能':)

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

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

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

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

在这个时间点,你的问题并没有一个明确的简单答案:)