- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试从现有的 csc 矩阵创建 petsc 矩阵。用this在脑海中,我创建了以下示例代码:
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:无法根据规则“安全”将数组数据从 dtype('complex128') 转换为 dtype('float64')
。我试图找出错误发生的确切位置,但无法理解回溯:
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 矩阵(我想稍后检索其中的一些特征对)的有效方法?
如果你们能帮我找到我的错误(希望不要太明显),我会很高兴。
最佳答案
我在让 PETSc 工作时遇到了麻烦,所以我不止一次配置它,在最后一次运行中我显然忘记了选项 --with-scalar-type=complex
。
这是我应该做的:
要么检查日志文件 $PETSC_DIR/arch-linux2-c-opt/conf/configure.log
。
或者看看 reconfigure-arch-linux2-c-opt.py
。
您可以在那里找到用于配置 PETSc 的所有选项。如果您也使用 SLEPc,您还需要重新编译它。现在,由于我将选项 (--with-scalar-type=complex
) 添加到重新配置脚本并运行了它,所以一切正常。
关于python - petsc4py : Creating AIJ Matrix from csc_matrix results in TypeError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29525041/
我正在尝试从现有的 csc 矩阵创建 petsc 矩阵。用this在脑海中,我创建了以下示例代码: import numpy as np import scipy.sparse as sp impor
标题相当清楚,但我试图取两个矩阵 A 和 B,并输出一个矩阵 C,该矩阵具有两个矩阵中的最小元素。 cij = min(aij, bij) 这就是我正在考虑这样做的方式: C A B A
我是一名优秀的程序员,十分优秀!