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

时间:2015-10-31 13:53:39

标签: python scipy linear-algebra sparse-matrix eigenvector

我想获得稀疏对称矩阵的特征向量,并且在给定时间内具有最低的精度。
目前,我在scipy.sparse.eigsh使用以下内容:

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

如果tol次迭代没有收敛到maxiter精度,则会引发ArpackNoConvergence误差,其中包含已收敛的特征向量/值,但不包含未收敛的特征向量/值。然而,我更喜欢精确1.e-14而不是1.e-15的向量,而不是没有向量。有没有办法强制返回尚未收敛的特征向量(可能还有另一个库)? 就像在Matlab中一样,eigs函数无论如何都返回特征向量,如果没有达到所需的精度,只需要一个额外的警告。

谢谢!

1 个答案:

答案 0 :(得分:0)

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))
相关问题