3

私は scipy.sparse.linalg.eigsh を使用して、非常に疎な行列の一般化された固有値の問題を解決し、メモリの問題が発生しています。行列は 100 万行/列の正方行列ですが、各行には約 25 個の非ゼロ エントリしかありません。行列全体をメモリに読み込まずに問題を解決する方法、つまり一度にメモリ内の行列のブロックのみを操作する方法はありますか?

解決策に、Python または Java で別のライブラリを使用することが含まれる場合は問題ありません。

4

1 に答える 1

3

ARPACKの場合、特定の行列-ベクトル積を計算するルーチンをコーディングするだけで済みます。これは、ディスクからマトリックスを読み取るなど、任意の方法で実装できます。

from scipy.sparse.linalg import LinearOperator

def my_matvec(x):
    y = compute matrix-vector product A x
    return y

A = LinearOperator(matvec=my_matvec, shape=(1000000, 1000000))
scipy.sparse.linalg.eigsh(A)

一般化された固有値問題の場合に必要なものについては、scipy.sparse.linalg.eigshのドキュメントを確認してください。

Scipy ARPACKインターフェースは、多かれ少なかれ完全なARPACKインターフェースを公開しているので、FORTRANまたは他の方法でArpackにアクセスすることで多くの利益が得られるとは思えません。

于 2012-11-03T13:43:59.100 に答える