scipy.sparse.linalg.spsolve http://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.linalg.spsolve.html已经足够清楚了,
但似乎为了速度你必须
pip install
scikit-umfpack https://pypi.python.org/pypi/scikit-umfpack
or else
- 构建 UMFPACK 和 AMD稀疏套件 http://www.cise.ufl.edu/research/sparse/SuiteSparse
- 然后从源代码重建 scipy,
[umfpack] umfpack_libs = ...
在 site.cfg 中。
否则 scipy.sparse.linalg 默认为较慢的 SuperLU。
scikit.sparse 是正确的选择吗?
与什么相比,以什么标准?
如果C / C++对你来说足够了,直接使用SuiteSparse。
任何工具都取决于你对什么感到满意,
对于用户:一个、两个、很多。
也许更好的可视化比更快的 spsolve 对您的项目更有帮助。
scipy.sparse 的一些非常明显的优点和缺点:
+ 用于快速开发的Python,数据输入——矩阵——可视化
+ 多个软件包基于 scipy.sparse 构建;
询问您的应用领域(是?)
- 粗糙的边缘(矩阵很痛苦),据我所知没有维基来收集提示和代码片段
- 层层叠加,scipy.sparse -- SuiteSparse -- ... BLAS ...
使计时和调试变得困难。
Fwiw,我的 iMac 上的求解器时间差异很大。
这些都是带有默认参数的,没有 umfpack。
(这不是一个现实的测试用例;但是满意的 http://en.wikipedia.org/wiki/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