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

关于eigshsvds的文档。

引用此代码

请引用(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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
spring引导服务器忽略java上载请求   java多个驼峰路由会导致大量线程吗?   java 安卓单签入回收器gridLayout管理器   Java中指向类的不同实例的对象数组   java的启动/停止和打开/关闭等分组功能是否违反了单一责任原则?   java hibernate组件映射与自定义值类型   java如何使用不同的JDK在Jenkins作业中使用JDK8   java从匹配器获取字符串的特定部分   java通过在Spark数据框内的数组列中映射来创建新列   servlet的java Tomcat配置   java多个活动不在一个应用程序安卓 studio中   javajsf:view beforePhase在我离开页面时多次触发   javascript如何使用“java脚本”进行加密,使用和“java”进行解密   java My App不是从URL ASPX读取简单的JSON   java在RESTish web服务中应用DDD原则