哪个更好,使用所有*fun
函数(arrayfun
、、cellfun
和)structfun
还是spfun
简单地使用for
循环?
哪种方法可以提供更好的性能,就代码的可读性而言,哪些方法应该被认为是更好的实践?
这真的取决于你所说的“性能”:)
如果您的意思是minimum execution time,那么有时*fun
会更快(例如,cellfun('isempty', ...);
(是的,字符串参数!)肯定比循环版本更好)。有时循环更快。如果您使用的是小于 2006 的 Matlab 版本,请*fun
默认使用这些功能。如果您使用的是较新的内容,请默认使用循环。您仍然必须始终进行分析以找出哪个更快。
正如 Amro 所指出的,如果您有一个能够执行 FP 算术的 GPU,以及支持 GpGPU 的最新版本的 Matlab,那么arrayfun
对gpuArray
输入的调用将被大规模并行化。但是,不能就执行时间做出一般性陈述;对于较小的数组或绝对庞大的数组,将所有内容复制到 GPU 的开销可能会抵消并行计算的任何好处,因此...分析确实是唯一确定的方法。
如果您的意思是最短编码*fun
时间,那么我会说只要操作简单,编码通常会更快。对于任何复杂的事情,通常最好选择循环。
如果您的意思是最佳的可读性,因此在专业环境中维护和实施更改所需的最少时间,当然,去循环。
在这个时间点,您的问题并没有一个明确的简单答案:)