2016-12-05 4 views
1

私は、いくつかのプログラムパッケージでLinearOperatorを構築しました。私はiLUプレコンディショナーを計算し、それをscipyソルバーで使いたいと思っています。 問題は、プレコンディショナー計算のための入力オブジェクトのタイプです。 "spilu"関数を使いたい場合は、numpy配列を入力に使うべきですが、私はLinearOperatorを持っています! したがって、LinearOperatorをnumpy配列に変換するにはどうすればよいですか?または、iLU前提条件を計算する別の方法は存在しますか?scipy LinearOperatorからnumpy配列を取得するには?

+0

これはLOですか、https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.sparse.linalg.LinearOperator.html – hpaulj

+0

小さな具体例を追加する必要があります。 – hpaulj

+0

* "私はLinearOperatorをいくつかのプログラムパッケージで構築しました" *どのパッケージ?あなたが持っている 'LinearOperator'について何を知っていますか? –

答えて

1

LinearOperatorに関連付けられたマトリックスを得る方法の1つは、それを恒等行列で乗算することです。この例では

op形状とLinearOperatorである(3,3):

In [104]: op * np.eye(op.shape[1], dtype=op.dtype) 
Out[104]: 
array([[1, 2, 0], 
     [3, 4, 5], 
     [0, 6, 7]]) 

警告:

In [103]: op 
Out[103]: <3x3 MyOperator with dtype=int64> 

ここopに関連する実際の行列です! np.eye()は高密度配列を作成し、上記の乗算は高密度 numpy配列を返します。 LinearOperatorの形状が大きすぎる場合は、メモリが不足する可能性があります。

中密度の配列を生成せずにLinearOperatorからスパースの行列にするのはおそらく可能ですが、もう少しコードが必要になります。あまりにも多くの時間を費やす前に、あなたが持っている具体的なLinearOperatorの属性とメソッドを確認してください。それは既に疎フォーマットである内部データを有するかもしれない。

関連する問題