【问题标题】:Matlab: arrayfun, cellfun, spfun and structfun vs. simple for-loopMatlab:arrayfun、cellfun、spfun 和 structfun 与简单的 for 循环
【发布时间】:2013-04-15 03:08:29
【问题描述】:

哪个更好,使用所有*fun 函数(arrayfuncellfunstructfunspfun)还是简单地使用for 循环?

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

【问题讨论】:

标签: matlab for-loop


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 2018-01-20
    • 1970-01-01
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-24
    相关资源
    最近更新 更多