Main Content

スパース行列の計算上の利点

メモリ管理

多数のゼロ要素を含むデータをスパース行列に保存すると、メモリを大幅に節約し、データ処理も高速化することができます。sparse は、double または logical の要素から構成される MATLAB® の任意の 2 次元行列に代入できる属性です。

こうした sparse の属性により、MATLAB では次のようなことができます。

  • 行列の非ゼロ要素のみをインデックスと共に保存

  • ゼロ要素への演算を省略して計算時間を短縮

非スパース行列の場合、MATLAB はすべての行列要素を内部に保存します。ゼロ要素部分も、その他の行列要素部分と同じストレージ容量を必要とします。スパース行列の場合、MATLAB は非ゼロ要素とそのインデックスのみを保存します。この方法の場合、ゼロ要素が含まれる割合が高い、大きい行列に対しては、データ ストレージに必要なメモリ総量をかなり削減できます。

whos コマンドを使用すると、行列のサイズ、ストレージ クラスなどの行列ストレージに関する上位レベルの情報を取得できます。たとえば以下の whos リストは、同じ行列のスパース バージョンと非スパースのバージョンの情報を示したものです。

M_full = magic(1100);          % Create 1100-by-1100 matrix.
M_full(M_full > 50) = 0;       % Set elements >50 to zero.
M_sparse = sparse(M_full);     % Create sparse matrix of same.

whos
  Name             Size                Bytes  Class     Attributes

  M_full        1100x1100            9680000  double              
  M_sparse      1100x1100               9608  double    sparse  

使用するバイト数にはゼロ要素の部分が含まれていないため、スパース行列のバイト数は小さくなります。

計算の効率性

スパース行列は、計算の効率性の点から見ても大きな利点があります。非スパース行列の処理と異なり、スパース行列の処理は、ゼロの加算 (x+0 は常に x) のような低水準の算術を実行する必要がありません。この結果として生じる効率性により、大規模なスパース データを処理するプログラムは、計算時間を大幅に削減できます。

関連するトピック