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

Performance MATLAB:将调用者分配到变量性能问题,performance,matlab,Performance,Matlab,我有一个特定函数之外的变量,我想把它放在一个工作区中。我通过使用assignin('caller')…来实现这一点。 作为一个测试用例,我做了相同的场景,一个如上所述,另一个只是在主函数中定义了一个重复的场景(下面的代码) 很简单,这存在一个性能问题,以下是我的结果: 正常 运行时间为1.613414秒。 分配('呼叫方',… 运行时间为1.849663秒 时间安排在这里并不重要,但随着(单个)变量数量的增加,它确实很重要。我看到我的工作中数量级的性能下降。我检查了两个版本在最后给出的结果是否完

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

很简单,这存在一个性能问题,以下是我的结果:

正常
运行时间为1.613414秒。
分配('呼叫方',…
运行时间为1.849663秒

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

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

在以下位置测试的MATLAB版本:

  • 2013a Win7-64位(me)
  • 2010b Win7-64位(路易斯·门多)
代码
这里也比较慢。Matlab 2010b,Win7 64位有趣的事情:如果变量名
i
更改为
ii
(以避免覆盖虚拟单位)性能差距似乎正在缩小increase@LuisMendo我也试过了,同样的慢性能。老实说,这一切都很奇怪——特别是在我测试的矩阵没有问题的情况下!
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