【发布时间】:2018-12-13 13:09:00
【问题描述】:
我在一个单元数组中有一堆 char 数组,它们实际上代表了 MATLAB 结构的声明。像这样的:
tmp{1} = 'testData.input = [1;2;3;4;5]'
tmp{2} = 'testData.output = [2;4;6;8;10]'
我需要执行这些“命令”并最终创建相应的结构。我在 for 循环中使用 eval 函数,它可以工作。
numEntries = numel(tmp);
for i = 1 : numEntries
eval(tmp{i});
end
但是,这非常缓慢。我应该提一下,真正的 char 数组非常大,实际上包含 3,000 多个数字。此外,tmp 单元格数组本身包含大约 25,000 个单元格。
鉴于我无法更改输入数据,即 tmp 只是从外部来源提供,有没有办法提高性能?
【问题讨论】:
-
你关心
tmp中定义的结构的名字吗?如果不是,那么我将创建一个numel(tmp)的单元格数组,读取每一行,将其拆分为字段名和数据,然后使用setField 将数据分配给该字段。否则我能想到的就是使用并行工具箱,如果你有它并且只是做一个 parfor 循环。 -
我忽略了结构是在多个 tmp 元素上定义的事实。您可以检查结构名称与前一个相比是否发生了变化,并相应地移动到元胞数组中的下一个元素
-
您需要评估所有字符串。评估后将创建的变量保存在 .mat 文件中以备将来使用。
-
@AlexanderVandenberghe 我实际上确实关心结构名称。据我了解,将
eval与 parfor 结合使用可能会导致错误。