4

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

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

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

谢谢 !

4

1 回答 1

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))
于 2015-10-31T19:38:58.450 回答