为了重构我的 MATLAB 代码,我想我会在函数式编程的启发下将函数作为参数传递(MATLAB 称之为匿名函数)。
但是,似乎性能受到了相当严重的打击。在下面的示例中,我比较了不同的方法。(代码片段被包装在一个函数中,以便能够使用子函数)
我得到的结果是直接 0 秒,使用子函数几乎 0 秒,使用匿名函数 5 秒。我在 OS X 10.6、C2D 1.8 GHz 上运行 MATLAB 7.7 (R2007b)。
任何人都可以运行代码,看看他们得到了什么?我对 Windows 上的性能特别感兴趣。
function [] = speedtest()
clear all; close all;
function y = foo(x)
y = zeros(1,length(x));
for j=1:N
y(j) = x(j)^2;
end
end
x = linspace(-100,100,100000);
N = length(x);
%% direct
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = x(i)^2;
end
r1 = cputime - t;
%% using subfunction
t = cputime;
y = foo(x);
r2 = cputime - t;
%% using anon function
fn = @(x) x^2;
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = fn(x(i));
end
r3 = cputime-t;
[r1 r2 r3]
end