如果在scipy.sparse文档中清楚地解释了这一点,我很抱歉。
当使用scipy时,你会建议使用什么函数来求解稀疏正定线性方程组?我想使用直接方法,并且我希望对列进行重新排序,以便在系数矩阵的Cholesky分解中尽可能地保留稀疏性。理想情况下,我可以尝试各种重新排序选项。
scipy.sparse中是否存在稀疏正定系统的直接求解器?是scikit.sparse的方法吗?
答案 0 :(得分:5)
scipy.sparse.linalg.spsolve 很清楚, 但似乎为了速度你必须
pip install
scikit-umfpack
或者
[umfpack] umfpack_libs = ...
。否则scipy.sparse.linalg默认为较慢的SuperLU。
是scikit.sparse的方法吗?
与什么相比,用什么标准? 如果C / C ++足够您,请直接使用SuiteSparse。 任何工具都取决于你喜欢什么, 用户:一,二,多。 也许更好的可视化可以帮助您的项目更快地解决问题。
scipy.sparse的一些非常明显的优点和缺点:
+ python用于快速开发,数据输入 - 矩阵 - 可视化
+几个包建立在scipy.sparse上;
在你的申请区域询问(这是?)
- 粗糙的边缘(矩阵是一种痛苦),afaik没有wiki来收集提示和代码片段
- 图层,scipy.sparse - SuiteSparse - ... BLAS ...
使计时和调试变得艰难。
Fwiw,我的iMac上的求解时间变化很大。 这些都是默认的args,没有umfpack (这不是一个现实的测试用例;但是 satisficing通常足够好。)
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