Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 修改结构的最快方法_Matlab_Optimization_Structure - Fatal编程技术网

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
是做任何事情的缓慢方式,最好避免。你可以试着直接打电话,但我怀疑这会有多大区别。此外,我很难想象在代码中分配结构字段(即使是动态分配)是一个重要的瓶颈。。。