garasubo's note

(´・ω・`)

Eigenで疎行列を扱う

| Comments

ある方程式とかを解くときに、行列をつくるということはよくやるが、 その内の非ゼロ要素が極端に少ない場合、行列がムダにおおきくなってしまうので、 疎行列用のクラスを使ってやる必要がある。

Eigenの場合、SparseMatrixという疎行列クラスがあるので、これを使えば行列のように 簡単に扱えて便利だった。 boostとかにも疎行列用のクラスはあるのだが、どこのサイトで見たか忘れたが、各種ライブラリと速度比較してEigenはかなり優秀だそうで。

検索しても情報が少ないが、公式のチュートリアルとリファレンスが最もまともな資料だった(ともに英語)。
Tutorial page 9 – Sparse Matrix
SparseMatrix< Scalar, Options, _Index > Class Template Reference

要素のセット方法を探すのに結構手間取った。 個別に要素をセットするときはinsertメソッドを使い、 まとめてセットするならTutorialのFirst Exampleにあるみたいに、Eigen::Tripletのvectorをつくってから、setFormTripletsでやるのが楽かなって感じ。

Comments