2

このコードを最適化しようとしています。これは簡略化されたバージョンです(実際のコードではありません)。

for i = 1:1000000
  a(i).x = a(i).x+1;
  a(i).y = a(i).y*2;
  a(i).f = i:i+128;
end

a(i)が速くなると、それを尊重するかどうかはわかります。次のように:

for i = 1:1000000
  b = a(i);
  b.x = b.x+1;
  b.y = b.y*2;
  b.f = i:i+128;
  a(i) = b;
end

ここで、a(i)をbにコピーし、最後にa(i)に戻します。a(i)へのポインタを定義することは可能ですか?C++に似たもの。

4

1 に答える 1

1

MATLABにはhandle、他の言語の参照と同様のデータ型がありますが、ここでは適切ではないと思います。

ここで提案する主な最適化は、構造の大きな配列ではなく、大きな配列の構造を使用することです。つまり、コードは次のようになります。

for i = ...
    a.x(i) = a.x(i) + 1;
    ...
end

このアプローチは通常、大幅に高速でメモリ効率が高くなります。

于 2012-12-04T07:10:23.727 に答える