加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python scipy eigs:无论收敛容差如何,在最大迭代次数后返回特征

发布时间:2020-12-20 13:08:20 所属栏目:Python 来源:网络整理
导读:我想得到一个稀疏对称矩阵的特征向量,在给定时间内具有最低的精度. 目前我在scipy.sparse.eigsh中使用以下内容: evals,evecs = eigsh(MyMatrix,2,which='LM',tol=1.e-15,maxiter=1000000) 如果它没有通过maxiter迭代收敛到tol精度,它会引发一个ArpackNoConv
我想得到一个稀疏对称矩阵的特征向量,在给定时间内具有最低的精度.
目前我在scipy.sparse.eigsh中使用以下内容:

evals,evecs = eigsh(MyMatrix,2,which='LM',tol=1.e-15,maxiter=1000000)

如果它没有通过maxiter迭代收敛到tol精度,它会引发一个ArpackNoConvergence错误,其中包含已收敛的特征向量/值,但不包含那些未收敛的特征向量/值.然而,我更倾向于使用精度为1.e-14而不是1.e-15的向量,而不是根本没有向量.有没有办法强制返回尚未收敛的特征向量(可能与另一个库)?
就像在Matlab中一样,eigs函数无论如何都返回特征向量,如果没有达到所需的精度,只需要一个额外的警告.

谢谢 !

解决方法

ArpackNoConvergence异常具有包含部分结果的.eigenvalues和.eigenvectors属性:

import numpy as np
from scipy.sparse.linalg import eigsh,ArpackNoConvergence

M = np.random.RandomState(0).randn(100,100)

try:
    w,v = eigsh(M,5,maxiter=20)
except ArpackNoConvergence as e:
    print(e)
    w = e.eigenvalues
    v = e.eigenvectors
    print(w.shape,v.shape)

打印:

ARPACK error -1: No convergence (21 iterations,2/5 eigenvectors converged)
((2,),(100,2))

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读