【问题标题】:Will there be difference in performance between anonymous functions and normal functions?匿名函数和普通函数的性能会有差异吗?
【发布时间】:2012-03-31 12:04:25
【问题描述】:

匿名函数和普通函数的性能会有差异吗?比如函数调用的开销有什么变化?

感谢和问候!

【问题讨论】:

标签: matlab anonymous-function


【解决方案1】:

很遗憾,我找不到关于该主题的任何具体内容。但是,与普通函数相比,匿名函数应该有额外的开销。

您可以自己尝试一下。首先创建文件nonanon.m

function x=nonanon(y)
  x=y^2;
end

然后创建一个单元格文件:

%% non anon
tic
for i=1:1000000
    z=nonanon(i);
end
toc

%% anon
f=@(x) x^2;
tic
for i=1:1000000
    z=f(i);
end
toc

享受,输出:

经过的时间是 0.513759 秒。

经过的时间是 14.434895 秒。

由此得出的结论是匿名函数速度较慢。

【讨论】:

  • Matlab 按名称和函数句柄调用函数。默认情况下,匿名函数通过第二种机制调用。我猜后者比较慢。但是,Mathworks 没有就此事发布任何具体信息。
【解决方案2】:

我重复了user677656 的小测试代码,但使用y=x*x 而不是平方(在nonanonanon 情况下)的一个小变体:

Elapsed time is 0.517514 seconds.
Elapsed time is 0.223450 seconds.

如果我改用y=x^2 变体,我会得到与user677656 相似的结果:

Elapsed time is 0.402366 seconds.
Elapsed time is 7.440174 seconds.

这是使用 Matlab 2012b。我不知道为什么这些会给出不同的结果。

我还测试了y=sin(x),其结果与x*x 案例相似,y=sqrt(x)nonanon 案例带来了轻微的优势(2.8 秒对 3.9 秒)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-09
    • 1970-01-01
    • 2011-07-18
    • 1970-01-01
    • 2010-10-14
    • 2012-08-03
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多