私は量子計算のいくつかの数値シミュレーションをやっている、と私は大きなエルミート行列(〜2^14行/列)の固有ベクトルを見つけたいQutipを使用してHPCに見つけ高速固有ベクトルとslepc4py
私は24コア/ 48スレッドXeonマシンで稼働します。コードはもともとQutipライブラリの助けを借りて書かれています。私は、付属のeigenstates()
関数が自分のマシン上で1つのスレッドしか利用していないことを知ったので、より高速な方法を見つけようとしています。
私はscipy.linalg
eig()
とeigh()
機能だけでなく、scipy.sparse.linalg
eig()
とeigh()
を使用してみましたが、両方はQutipに建てられた機能よりも遅いようです。
私はslepc4pyを使用することでスピードアップが得られるかもしれないという提案を見たことがありますが、パッケージのドキュメントは非常に不足しているようです。私はnumpyの複雑な配列をSLEPC行列に変換する方法を見つけることができません。
A = PETSc.Mat().create()
A[:,:] = B[:,:]
# where B is a scipy array of complex type
TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'
ようこそStackoverflow!あなたの質問はhttp://stackoverflow.com/questions/29525041/petsc4py-creating-aij-matrix-from-csc-matrix-results-in-typeerrorに似ているようです。PETScとSLEPcを再コンパイルし、 petsc4pyとslepc4pyをインストールしてください。低エネルギーの純粋な量子状態のみに興味があるなら、EPSARMOLESTやEPSLANCZOSのようなEPSTypeと組み合わされたEPSSetWhichEigenpairs()とEPSSetDimensions()のEPS_SMALLEST_MAGNITUDEオプション\tに興味があります。 – francis
ところで、[scipy.sparse.linalg.eigsh](https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.eigsh.html)も証明されるかもしれません役に立った... – francis