0

matlab中结构的预分配是一个问题。请在 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)?

4

1 回答 1

2

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

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

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

于 2013-02-22T20:29:58.070 回答