我正在运行一个循环,它从表中的单元格中获取数据并将它们添加到结构中。这正是它的样子:
TotalLowResfields = fieldnames(TotalLowRes);
for t = 10:numel(TotalLowResfields)
rows = {TotalLowRes.c};
cols = [TotalLowRes.y] - 10 + t;
subtable = Raw(rows, cols);
values = table2cell(subtable);
values = values(logical(eye(numel(rows))));
[TotalLowRes.(TotalLowResfields{t})] = deal(values{:});
end
通过此循环需要将近7分钟,我想预先分配以提高速度。
我尝试过预分配:
subtable = zeros(1828,1828);
values = zeros(1828,1);
没有多大帮助。预分配需要404秒,之后需要403秒。
我正在使用的结构数组TotalLowRes
中有1828个结构,并且有29个字段,因此它通过19个字段的1828个结构= 34732个条目。但是,如果可能的话,我如何预先分配结构?
编辑:我运行了探查器,这就是它显示的内容:
Function Name Calls Total Time Self Time
able2cell 19 362.585 s 1.838 s
mat2cell 34732 360.747 s 360.747 s
table.subsrefParens 19 66.066 s 0.720 s
table.subsref 19 66.066 s 0.000 s
makeUniqueStrings 38 64.887 s 0.003 s
makeUniqueStrings>makeUnique 38 64.258 s 63.960 s
似乎功能mat2cell
和makeUniqueStrings>makeUnique
是最昂贵的功能。有没有办法尽量减少它们的计算时间?