2013-03-15 18 views
5

scipyスパース行列を効率的に読み込む方法を見つけることができません。例えば、petsc4pyマトリックスに変換することができる。 PETSc.Mat().createAIJ。私はthis threadを見つけましたが、私はそれを適用することができません。scipyスパース行列をpetsc4pyの入力として

私はまた、このようなことが実際に文書化されているポインタを感謝します。 demoディレクトリの例では、一部しか説明していないため、ドキュメントストリングは表示されません。

+0

あなたは正確に何を試しましたか?どのように機能しませんでしたか?私は自分のシステムに 'petsc4py'を持っていませんが、あなたのリンクの指示は私にはわかりやすいようです。 – Jaime

答えて

6

あなたのリンクはPETScにスパース行列を作成するために、あなたはこのようなコマンドを使用する必要があることを述べている:

PETSc.Mat().createAIJ(size=(nrows,ncols), csr=(ai,aj,aa)) 

thisによると、aiajaaはPETSc-話すには、以下のとおりです。

> i - row indices 
> j - column indices 
> a - matrix values 

これらはそれぞれ、scypy.sparse.csr_matrix.indptr.indices.data属性に、を参照してください、等価です詳細については、を参照してください。あなたのリンクが正しい場合

ので、次のように動作するはずです:

>>> from petsc4py import PETSc 
>>> import scipy.sparse 
>>> csr_mat = scipy.sparse.rand(1000, 1000, density=0.001, format='csr') 
>>> petsc_mat = PETSc.Mat().createAIJ(size=csr_mat.shape, 
...         csr=(csr_mat.indptr, csr_mat.indices, 
...          csr_mat.data)) 

残念ながら、私はそれを自分自身をテストすることはできません。

+0

これは完全に私の質問に答える。 'Mat()。createAIJ()'関数は明らかに実際に文書化されているPETSc関数(簡単に読めるコード)を呼び出すので、ドキュメントに関する私の混乱も解消しました。私は、この関数呼び出しがPETSc関数の直接呼び出しであることに気づいていませんでした。 –

+0

@RafaelReiter実際には、petsc4pyのソースコード(https://code.google.com/p/petsc4py/source/browse/)を見ることができます。関数 'createAIJ'は[ここ](https:///code.google.com/p/petsc4py/source/browse/src/PETSc/Mat.pyx#242)。それより少し複雑なようですが、私が見つけられなかった 'Mat_AllocAIJ_CSR'が呼び出されるので、何が起こっているのかは分かりません。しかし、これはあなたのために働く場合、それはあなたのために働く... – Jaime

+0

あなたはそうです、それは簡単ではない。私は数時間前に 'MatCreateSeqAIJWithArrays'を数時間前に見たと思いましたが、私はしませんでした。デモの横にあるすべてのpetsc4py機能を使用する正しい方法を思い付くには、どのようなヒントがありますか? –

関連する問題