我想得到一个稀疏对称矩阵的特征向量,在给定时间内具有最低的精度.
目前我在scipy.sparse.eigsh中使用以下内容:
目前我在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))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。