预分配struct,matlab

时间:2013-02-22 20:23:30

标签: matlab

在matlab中预先分配struct是一个问题。 请参阅matlab profiler中的以下代码

      time   calls  line

                2    65 sizeofTLS= 10000;
    < 0.01       2   66 LaserS(sizeofTLS).POI(n)={0}; 
      0.03       2   67 LaserS(sizeofTLS).dis(n)={0}; 
      0.04       2   68 LaserS(sizeofTLS).plane(n)={0}; 
                     69 
                     70 
    < 0.01       2   71 for it=1:sizeofTLS 
     16.74 2823212   72     LaserS(it).POI(1:n)={0}; 
     16.91 2823212   73     LaserS(it).dis(1:n)={0}; 
     16.88 2823212   74     LaserS(it).plane(1:n)={0}; 
      1.04 2823212   75 end 

我如何改进它(72,73,74)?

1 个答案:

答案 0 :(得分:2)

预分配结构的最佳方法是使用以下语法:

myEmptyCell = num2cell( zeros(1,n) );
b           = repmat( struct('POI', myEmptyCell ,...
                             'dis', myEmptyCell,...
                             'plane', myEmptyCell ) , sizeofTLS, 1 );

这比不在我的笔记本电脑上预分配快约10倍。