python的primme包装器
primme的Python项目详细描述
primme是一个python接口,PRIMME,一个用于计算几个特征值/特征向量和奇异值/向量的高性能库。 primme特别针对大型、困难的问题进行了优化。 支持实对称和复hermitian问题,标准的a x=lambdax和广义的ax=lambdax。 它可以找到最大、最小或内部的奇异/特征值,并且可以使用预处理来加速收敛。
Primme的主要贡献者是James R.McCombs、Eloy Romero Alcalde、Andreas Stathopoulos和Lingfei Wu。
安装
您可以使用pip安装最新版本:
pip install numpy # if numpy is not installed yet pip install scipy # if scipy is not installed yet pip install future # if using python 2 conda install mkl-devel # if using Anaconda Python distribution pip install primme
对于构建开发版本,可以选择执行以下操作:
git clone https://github.com/primme/primme cd primme make python_install
用法
以下示例从实对称矩阵计算几个特征值和特征向量:
>>> import Primme, scipy.sparse >>> A = scipy.sparse.spdiags(range(100), [0], 100, 100) # sparse diag. matrix >>> evals, evecs = Primme.eigsh(A, 3, tol=1e-6, which='LA') >>> evals # the three largest eigenvalues of A array([ 99., 98., 97.]) >>> new_evals, new_evecs = Primme.eigsh(A, 3, tol=1e-6, which='LA', ortho=evecs) >>> new_evals # the next three largest eigenvalues array([ 96., 95., 94.]) >>> evals, evecs = primme.eigsh(A, 3, tol=1e-6, which=50.1) >>> evals # the three closest eigenvalues to 50.1 array([ 50., 51., 49.])
下面的示例从一个广义hermitian问题计算几个特征值和特征向量,而不需要对b进行分解或反转::
>>> import Primme, scipy.sparse >>> A = scipy.sparse.spdiags(range(100), [0], 100, 100) # sparse diag. matrix >>> M = scipy.sparse.spdiags(np.asarray(range(99,-1,-1)), [0], 100, 100) >>> evals, evecs = primme.eigsh(A, 3, M=M, tol=1e-6, which='SA') >>> evals array([1.0035e-07, 1.0204e-02, 2.0618e-02])
以下示例计算一些奇异值和向量:
>>> import Primme, scipy.sparse >>> A = scipy.sparse.spdiags(range(1, 11), [0], 100, 10) # sparse diag. rect. matrix >>> svecs_left, svals, svecs_right = Primme.svds(A, 3, tol=1e-6, which='SM') >>> svals # the three smallest singular values of A array([ 1., 2., 3.]) >>> A = scipy.sparse.rand(10000, 100, random_state=10) >>> prec = scipy.sparse.spdiags(np.reciprocal(A.multiply(A).sum(axis=0)), ... [0], 100, 100) # square diag. preconditioner >>> svecs_left, svals, svecs_right = Primme.svds(A, 3, which=6.0, tol=1e-6, ... precAHA=prec) >>> ["%.5f" % x for x in svals.flat] # the three closest singular values of A to 0.5 ['5.99871', '5.99057', '6.01065']
进一步examples。
引用此代码
请引用(bibtex):
- a.stathopoulos和j.r.mccombsprimme:预条件迭代 多方法特征解算器:方法和软件描述 数学软件交易卷37,第2期,(2010年) 21:1-21:30。
- L.Wu,E.Romero和A.Stathopoulos,Primme_SVDS:高性能 用于精确大规模计算的预处理svd求解器, 科学杂志。计算,第39卷,第5期,(2017),S248–S271。
许可证信息
primme和这个接口是根据3条款许可bsd授权的。
联系信息
有关报告错误或有关功能的问题,请通过以下方式联系Andreas Stathopoulos 电子邮件,andreas位于cs.wm.edu。有关更多信息,请参见 网页http://www.cs.wm.edu/~andreas/software。