我在特定函数之外有变量,我想把它放在工作区中。我是通过使用assignin('caller'...
来完成的。
作为测试用例,我做了相同的场景,一个如上所述,另一个只是在main函数中定义一个重复的场景(下面的代码)
很简单,这有一个性能问题,这是我的结果:
正常
经过的时间是1.613414秒 的 assignin( '呼叫者',...
经过的时间是1.849663秒。
这里的时间并不重要,但随着(单个)变量的数量增加,它确实很重要。我看到我的工作量级下降。我检查了两个版本在最后给出了完全相同的结果
注意:由于我的代码中没有出现的一些奇怪的原因,我有许多矩阵和单变量,每个都涉及操作和计算。如果使用assignin('caller'...
调用矩阵,则字面上没有性能影响。对于单个变量,会出现性能问题。
测试的MATLAB版本:
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