Matlab 修改结构的最快方法
关于如何从函数内部修改基本工作区结构,我现在有两种不同的实现 对于基本工作区中的“我的结构”声明:Matlab 修改结构的最快方法,matlab,optimization,structure,Matlab,Optimization,Structure,关于如何从函数内部修改基本工作区结构,我现在有两种不同的实现 对于基本工作区中的“我的结构”声明: arg = struct('aa', struct('abc',30)); 我测试的第一个函数使用evalin命令: function modifyArg1(parameter, value) evalin('base', [parameter '=' value ';']) end 这就是所谓的: modifyArg1('arg.aa.abc', '60') [arg] = mod
arg = struct('aa', struct('abc',30));
我测试的第一个函数使用evalin
命令:
function modifyArg1(parameter, value)
evalin('base', [parameter '=' value ';'])
end
这就是所谓的:
modifyArg1('arg.aa.abc', '60')
[arg] = modifyArg2(arg, 'aa', 'abc', 60);
第二个函数具有结构arg
作为输入和输出:
function [arg] = modifyArg2(arg, parameter1, parameter2, value)
arg.(parameter1).(parameter2) = value;
end
这就是所谓的:
modifyArg1('arg.aa.abc', '60')
[arg] = modifyArg2(arg, 'aa', 'abc', 60);
我测试了这两个函数,看看哪一个最快:
tic
for ii = 1 : 10000
[arg] = modifyArg2(arg, 'aa', 'abc', 60);
end
toc
tic
for ii = 1 : 10000
modifyArgIn1('arg.aa.abc', '60');
end
toc
Elapsed time is 0.141994 seconds.
Elapsed time is 0.677188 seconds.
因此,第二个函数几乎快5倍。有没有其他更快的方法呢?重点关注
修改arg2
,因为在您的示例中这是最快的方法。您获得的高时间与执行arg无关。(参数1)。(参数2)=值代码>但执行函数modifyArg2
。如果您想做得更快,一种方法是使用arg.(参数1)。(参数2)=值代码>在循环中内联。例如:
parameter1 = 'aa';
parameter2 = 'abc';
tic
for ii = 1 : 10000
arg.(parameter1).(parameter2) = 60;
end
toc
在我的测试中,这比执行modifyArg2
函数快近10倍。甚至这也比执行modifyArg2
快得多(正如我测试的那样):
事实上,这只是关于如何eval
是做任何事情的缓慢方式,最好避免。你可以试着直接打电话,但我怀疑这会有多大区别。此外,我很难想象在代码中分配结构字段(即使是动态分配)是一个重要的瓶颈。。。