matlab - 修改结构的最快方法

标签 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作为输入和输出:

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 倍。有没有另一种方法可以更快地做到这一点?

最佳答案

关注 modifyArg2 因为这是您示例中最快的方法。您获得的高时间与 arg.(parameter1).(parameter2) = value; 的执行无关,但与您执行函数 modifyArg2 的事实有关。如果您想更快地完成,一种方法是在循环中使用 arg.(parameter1).(parameter2) = value; 内联。例如:

parameter1 = 'aa';
parameter2 = 'abc';
tic
for ii = 1 : 10000   
    arg.(parameter1).(parameter2) = 60;     
end
toc

在我的测试中,这比执行 modifyArg2 函数快了将近 10 倍。即使这样也比执行 modifyArg2 快得多(正如我测试的那样):

tic
for ii = 1 : 10000   
    parameter1 = 'aa';
    parameter2 = 'abc';
    arg.(parameter1).(parameter2) = 60;     
end
toc

关于matlab - 修改结构的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21760301/

相关文章:

matlab - 如何找到数组元素的索引数组?

matlab - 什么是最好的相机校准方法?

php - 连接、多个参数或 sprintf?

python - scipy 中的有界根查找

C#,从二进制文件中读取结构

performance - 矢量化双循环 - MATLAB

excel - 如何在 MATLAB 中从 xlsread 读取文本值?

javascript - 优化代码仅定义一次变量,代码仅在变量处于更改功能时才起作用,而对于更改之外的代码我重新定义?

c++ - 为什么结构体不能包含自身的Instance?

c - 将文本文件读入结构