SciPyで固有値・固有ベクトルを求める場合、scipy.linalg.eigを利用する。SciPy自体、LAPACKを使っており、大抵の場合は問題がない。しかし、巨大な行列での固有値問題を解く場合、メモリなどの関係で計算が破綻する場合がある。FORTRANであれば、ARPACKが利用されることが多い。
SciPyでは現時点でARPACKの利用はできない。しかし、開発バージョンにおいては、既にARPACKのラッパーが提供されており、疎行列演算のモジュール群であるscipy.splinalgのscipy.splinalg.eigenを利用することになる。
個人的に、分子動力学(MD)計算によるタンパク質座標データの軌跡に対して主成分分析(PCA)を行いたかったのだが、2GB程度のメモリだと、scipy.linalg.eigではメモリオーバーで破綻してしまった。そこで、scipy.splinalg.eigenを利用したところ、問題なく処理することができた。
scipy.splinalg.eigenは、巨大配列の固有値を解く場合には有効だが、開発バージョンであるので問題が出るかもしれない。その辺は自己責任で。
SciPyでは現時点でARPACKの利用はできない。しかし、開発バージョンにおいては、既にARPACKのラッパーが提供されており、疎行列演算のモジュール群であるscipy.splinalgのscipy.splinalg.eigenを利用することになる。
個人的に、分子動力学(MD)計算によるタンパク質座標データの軌跡に対して主成分分析(PCA)を行いたかったのだが、2GB程度のメモリだと、scipy.linalg.eigではメモリオーバーで破綻してしまった。そこで、scipy.splinalg.eigenを利用したところ、問題なく処理することができた。
scipy.splinalg.eigenは、巨大配列の固有値を解く場合には有効だが、開発バージョンであるので問題が出るかもしれない。その辺は自己責任で。
コメント