Mathematics    

はじめに

スパース行列は、大部分がゼロ要素である行列の特別なクラスです。このプロパティは、MATLABでは、

この節では、つぎの事柄について説明します。

スパース行列ストレージ

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

MATLABは、実要素をもつスパース行列を内部にストアするため3つの配列をもっています。nnz個の非ゼロ要素をもつmn列のスパース行列を考えましょう。

この行列は、nnz個の浮動小数点数とnnz+n+1個の整数をストアするストレージを必要とします。浮動小数点数は8バイト、整数は4バイトで、スパース行列をストアするためには、

のストレージが必要です。複素数要素をもつスパース行列もまた取り扱えます。この場合、MATLABは、非ゼロ要素の虚数部をストアするためnnzの長さの4番目の配列を必要とします。要素は、実数部または虚数部のどちらかが非ゼロであれば、要素としては非ゼロと考えます。

一般的なストレージ情報

whosコマンドを使って、行列のサイズ、クラスを含む行列ストレージに関する高水準の情報を得ることができます。たとえば、つぎの whosリストは、同じ行列をスパースで表したものと、フルで表したものとの情報を示しています。

使用されるバイト数は、ゼロ要素の部分を含んでいないために、スパースの場合のほうが、かなり少なくなっています。この場合。スパース行列の密度は、4404/9680000で、約 0.00045% です。


 関数のまとめ スパース行列の作成