スパース行列の計算上の利点
メモリ管理
多数のゼロ要素を含むデータをスパース行列に保存すると、メモリを大幅に節約し、データ処理も高速化することができます。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
) のような低水準の算術を実行する必要がありません。この結果として生じる効率性により、大規模なスパース データを処理するプログラムは、計算時間を大幅に削減できます。