0

matlab での構造体の事前割り当てが問題です。matlab プロファイラーで次のコードを参照してください。

      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 に答える