9

哪个更好,使用所有*fun函数(arrayfun、、cellfun和)structfun还是spfun简单地使用for循环?

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

4

1 回答 1

17

这真的取决于你所说的“性能”:)

如果您的意思是minimum execution time,那么有时*fun会更快(例如,cellfun('isempty', ...);(是的,字符串参数!)肯定比循环版本更好)。有时循环更快。如果您使用的是小于 2006 的 Matlab 版本,请*fun默认使用这些功能。如果您使用的是较新的内容,请默认使用循环。您仍然必须始终进行分析以找出哪个更快。

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

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

如果您的意思是最佳的可读性,因此在专业环境中维护和实施更改所需的最少时间,当然,去循环。

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

于 2013-04-22T10:06:12.310 回答