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

标签 python scipy sparse-matrix eigenvector arpack

我想在给定时间内以可承受的最佳精度获得稀疏对称矩阵的特征向量。
目前我将以下内容与 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 exception 具有包含部分结果的 .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))

关于 python scipy eigs : return eigenvector after maximum number of iterations whatever the convergence tolerance,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33452383/

相关文章:

python - 在 Cherrypy 中动态创建页面定义

Python-Fitting 二维高斯到数据集

r - 优化网络范围功能

python - 在 Scipy 稀疏矩阵中寻址范围

当大小未知时创建一个指针数组(稀疏矩阵)

python - 如何在 SSL 下制作网站的一部分而其余部分不?

python - 为给定的单词集创建 id 的简单 [pythonic] 方法

python - 使用多模型的装袋算法

python - 具有广播的稀疏 Scipy 矩阵和向量的元素最大值

python - 如何使用 matplotlib 在 python 中绘制 3D 密度图