2

既存のcsc-matrixからpetsc-matrixフォームを作成しようとしています。これを念頭に置い、次のサンプルコードを作成しました。

import numpy as np
import scipy.sparse as sp
import math as math
from petsc4py import PETSc
n=100

A = sp.csc_matrix((n,n),dtype=np.complex128)
print A.shape
A[1:5,:]=1+1j*5*math.pi

p1=A.indptr
p2=A.indices
p3=A.data
petsc_mat = PETSc.Mat().createAIJ(size=A.shape,csr=(p1,p2,p3))

これは、行列が実数値のみで構成されている限り、完全に機能します。マトリックスが複雑な場合、このコードを実行すると TypeError: Cannot cast array data from dtype('complex128') to dtype('float64') according to the rule 'safe'. エラーが発生した場所を正確に把握しようとしましたが、トレースバックをあまり理解できませんでした。

petsc_mat = PETSc.Mat().createAIJ(size=A.shape,csr=(p1,p2,p3))  File "Mat.pyx", line 265, in petsc4py.PETSc.Mat.createAIJ (src/petsc4py.PETSc.c:98970)
File "petscmat.pxi", line 662, in petsc4py.PETSc.Mat_AllocAIJ (src/petsc4py.PETSc.c:24264)
File "petscmat.pxi", line 633, in petsc4py.PETSc.Mat_AllocAIJ_CSR (src/petsc4py.PETSc.c:23858)
File "arraynpy.pxi", line 136, in petsc4py.PETSc.iarray_s (src/petsc4py.PETSc.c:8048)
File "arraynpy.pxi", line 117, in petsc4py.PETSc.iarray (src/petsc4py.PETSc.c:7771)

複雑なscipy cscマトリックスからpetscマトリックス(後でいくつかの固有ペアを取得したい)を作成する効率的な方法はありますか?

私の(できればあまり明白ではない)間違いを見つけるのを手伝ってくれたら、本当にうれしいです。

4

1 に答える 1