推荐用于scipy中稀疏正定线性系统的直接求解器?

lit*_*leO 5 scipy sparse-matrix

如果在scipy.sparse文档中清楚地解释了这一点,我很抱歉.

当使用scipy时,你会建议使用什么函数来求解稀疏正定线性方程组?我想使用直接方法,并且我希望对列进行重新排序,以便在系数矩阵的Cholesky分解中尽可能地保留稀疏性.理想情况下,我可以尝试各种重新排序选项.

scipy.sparse中是否存在稀疏正定系统的直接求解器?是scikit.sparse的方式吗?

den*_*nis 5

scipy.sparse.linalg.spsolve 很清楚,但似乎速度你必须

pip install scikit-umfpack

要不然

  1. SuiteSparse构建UMFPACK和AMD
  2. 然后在site.cfg中从源代码重建 [umfpack] umfpack_libs = ...scipy.

否则scipy.sparse.linalg默认为较慢的SuperLU.

是scikit.sparse的方式吗?

相比什么,用什么标准?如果C/C++足够您,请直接使用SuiteSparse.任何工具都取决于你所熟悉的和用户:一,二,多.也许更好的可视化将有助于您的项目,而不是更快的spsolve.

scipy.sparse的一些非常明显的优点和缺点:

+ python用于快速开发,数据输入 - 矩阵 - 可视化
+几个包建立在scipy.sparse上; 在你的应用领域周围问(这是?)
- 粗糙的边缘(矩阵很痛苦),afaik没有wiki来收集提示和代码片段
- 图层,scipy.sparse - SuiteSparse - ... BLAS ..使计时和调试变得艰难.

Fwiw,我的iMac的求解时间变化很大.这些都是默认的args,没有umfpack.
(这不是一个现实的测试用例;但 满意度往往足够好.)

X = sparse.rand( m, n, dens, format="csr" )
A = 1e-6 * sparse.eye(m) + X * X.T
linalg solvers( A, b )

(5000, 5000)  density 0.42 % --
   51 msec spsolve
    5 msec bicg
    3 msec bicgstab
    2 msec cg
    4 msec cgs
    3 msec gmres
    4 msec lgmres
    1 msec minres
    6 msec qmr
    5 msec lsmr
(5000, 5000)  density 0.84 % --
  428 msec spsolve
   12 msec bicg
    7 msec bicgstab
    5 msec cg
   10 msec cgs
    6 msec gmres
    8 msec lgmres
    2 msec minres
   13 msec qmr
   12 msec lsmr
(5000, 5000)  density 1.3 % --
 1462 msec spsolve
   16 msec bicg
    9 msec bicgstab
    7 msec cg
   11 msec cgs
    7 msec gmres
   10 msec lgmres
    1 msec minres
   18 msec qmr
   14 msec lsmr
Run Code Online (Sandbox Code Playgroud)