预分配具有多个变量的循环

时间:2016-02-09 07:50:53

标签: matlab

我正在运行一个循环,它从表中的单元格中获取数据并将它们添加到结构中。这正是它的样子:

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

似乎功能mat2cellmakeUniqueStrings>makeUnique是最昂贵的功能。有没有办法尽量减少它们的计算时间?

0 个答案:

没有答案