lit*_*leO 5 scipy sparse-matrix
如果在scipy.sparse文档中清楚地解释了这一点,我很抱歉.
当使用scipy时,你会建议使用什么函数来求解稀疏正定线性方程组?我想使用直接方法,并且我希望对列进行重新排序,以便在系数矩阵的Cholesky分解中尽可能地保留稀疏性.理想情况下,我可以尝试各种重新排序选项.
scipy.sparse中是否存在稀疏正定系统的直接求解器?是scikit.sparse的方式吗?
scipy.sparse.linalg.spsolve 很清楚,但似乎速度你必须
pip install scikit-umfpack
要不然
[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)