如果在 scipy.sparse 文档中对此进行了清楚的解释,我很抱歉。
使用 scipy 时,您建议使用什么函数来求解稀疏的正定线性方程组?我想使用直接方法,并且我希望对列进行重新排序,以便在系数矩阵的 Cholesky 分解中尽可能地保持稀疏性。理想情况下,我可以尝试各种重新排序选项。
scipy.sparse 中是否存在稀疏正定系统的直接求解器?scikit.sparse 是要走的路吗?
如果在 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 上变化很大。这些都带有默认参数,没有 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