4
我現在有兩種不同的實現方式,即如何從函數內部修改基礎工作區結構。修改結構的最快方法
用於基礎工作空間我的結構聲明:
arg = struct('aa', struct('abc',30));
,我測試的第一種功能使用evalin
命令:
function modifyArg1(parameter, value)
evalin('base', [parameter '=' value ';'])
end
,被稱爲是這樣的:
modifyArg1('arg.aa.abc', '60')
第二個函數的結構爲arg
作爲輸入a第二輸出:
function [arg] = modifyArg2(arg, parameter1, parameter2, value)
arg.(parameter1).(parameter2) = value;
end
,並且被稱爲這種方式:
[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時間更快。還有另一種方法可以更快地做到這一點嗎
真的,這只是eval'如何'是做任何事情,最好避免緩慢的方式。你可以嘗試直接調用['setfield'](http://www.mathworks.co.uk/help/matlab/ref/setfield.html),但我懷疑它會有很大的不同。另外,我很難想象即使動態分配結構域的代碼也是一個重要的瓶頸。 – Notlikethat