簡體   English   中英

python scipy eigs:無論收斂容差如何,在最大迭代次數后返回特征向量

[英]python scipy eigs : return eigenvector after maximum number of iterations whatever the convergence tolerance

我想得到一個稀疏對稱矩陣的特征向量,在給定時間內具有最低的精度。
目前我在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))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM