MATLAB:将调用者分配给变量性能问题

时间:2013-12-27 20:10:49

标签: performance matlab

我在特定函数之外有变量,我想把它放在工作区中。我是通过使用assignin('caller'...来完成的。 作为测试用例,我做了相同的场景,一个如上所述,另一个只是在main函数中定义一个重复的场景(下面的代码)

很简单,这有一个性能问题,这是我的结果:

  

正常
  经过的时间是1.613414秒   的 assignin( '呼叫者',...
  经过的时间是1.849663秒。

这里的时间并不重要,但随着(单个)变量的数量增加,它确实很重要。我看到我的工作量级下降。我检查了两个版本在最后给出了完全相同的结果

注意:由于我的代码中没有出现的一些奇怪的原因,我有许多矩阵和单变量,每个都涉及操作和计算。如果使用assignin('caller'...调用矩阵,则字面上没有性能影响。对于单个变量,会出现性能问题。

测试的MATLAB版本:

  • 2013a Win7-64bit( me
  • 2010b Win7-64bit( Luis Mendo

CODE

function sof

sig = 0.3;
max_iter = 100000;
% in functiond efined variables
y1 = 2.5;
y2 = 7.3;
y3 = 3.4;
y4 = 7.2;
y5 = 2.2;
y6 = 1.7;
y7 = 9.2;
k = zeros(1,max_iter);

% defined elswhere using assignin 'caller'
get_vars (max_iter);

% perform calculations with variables defined here
tic
for i=1:max_iter
    k(i) = normrnd(y1,sig)/y2*y3*y4/y5*y6/y7/y1*y2 + y1*y3*y5/y2;
end
toc

% perform calculations with variables defined with assignin('caller',...;
tic
for i=1:max_iter
    k_a(i) = normrnd(x1,sig)/x2*x3*x4/x5*x6/x7/x1*x2 + x1*x3*x5/x2;
end
toc

end

function get_vars (mrange)
    assignin('caller','x1',2.5);
    assignin('caller','x2',7.3);
    assignin('caller','x3',3.4);
    assignin('caller','x4',7.2);
    assignin('caller','x5',2.2);
    assignin('caller','x6',1.7);    
    assignin('caller','x7',9.2);   
    assignin('caller','k_a',zeros(1,mrange ));
end

0 个答案:

没有答案