雲雀は高く空を舞い このページをアンテナに追加 RSSフィード

「ひよこは高く空を舞い」について

2007-02-12

データ構造とメモリ  データ構造とメモリ - 雲雀は高く空を舞い を含むブックマーク はてなブックマーク -  データ構造とメモリ - 雲雀は高く空を舞い  データ構造とメモリ - 雲雀は高く空を舞い のブックマークコメント

メモリ必要量は、MATLABの様々なデータ構造で異なります。MATLABのストア方法を考慮することにより、これらの構造に使用されるメモリ量を減らすことができる可能性があります。

数値配列

符号付および符号なし整数

8-bits1-byte16-bits2-bytes32-bits4-bytes64-bits8-bytes

浮動小数点数

single4-bytesdouble8-bytes

複素数配列

MATLAB は、複素数データを実部と虚部として別にストアします。複素配列変数のコピーを作成し、 その後、配列の実部または虚部のみ修正する場合、 MATLAB は、実部と虚部の両方を含む新しい配列を作成します。

スパース行列

スパース形式で大部分ゼロであるような値を持つ行列をストアすることが最良です。スパース行列は、より少ないメモリを使用し、フル行列の操作よりも高速になります。 sparse 関数を使用して、フル行列をスパース形式に変換することができます。

大きな行列を予め割り当てる

MATLAB では、カレントの変数を保存するために、MATLAB ヒープの中で利用可能なメモリが足りない場合、オペレーティングシステムのメモリを要求します。必要なメモリセグメントのサイズがMATLAB ヒープで利用可能な限り、ヒープの中でメモリを再使用します。

たとえば 1 台のマシン上で、つぎのステートメント群が約 15.4 MBの RAM を使うとします。 

a = rand(1e6,1);
b = rand(1e6,1);

つぎのステートメントは、約 16.4 MB の RAM を使います。

c = rand(2.1e6,1);

つぎのステートメント群は、約 32.4 MB の RAM を使います。 これは、MATLAB では 2 つの 1 MB の配列に占領されていた空間に 2.1MB の配列を入れることができないためです。

a = rand(1e6,1);
b = rand(1e6,1);
clear
c = rand(2.1e6,1);

メモリの過剰な割り当てを防ぐ最も簡単な方法は、最初に大きなベクトルを割り当てることです。 つぎのステートメント群は、約 16.4 MB の RAM のみを使います。

c = rand(2.1e6,1);
clear
a = rand(1e6,1);
b = rand(1e6,1);
トラックバック - http://chick.g.hatena.ne.jp/allegro/20070212
テクノラティプロフィール