【问题标题】:Finding 2 largest eigenvalues of large-sparse matrix in Python [closed]在 Python 中找到大稀疏矩阵的 2 个最大特征值 [关闭]
【发布时间】:2015-07-28 13:45:33
【问题描述】:


我想找到一个大的、稀疏的和对称的矩阵(在 python 中)的第一和第二大特征值。 k=2 的 scipy.sparse.linalg.eigsh 给出了相对于绝对值的第二大特征值 - 所以这不是一个好的解决方案。另外,我不能使用numpy方法,因为我的矩阵太大,numpy太慢...
我不确定这个问题的最佳解决方案是什么 - 欢迎任何帮助。


谢谢!

【问题讨论】:

    标签: python numpy scipy sparse-matrix eigenvalue


    【解决方案1】:

    tl;dr:您可以使用which='LA' 标志,如documentation 中所述。

    我引用:

    scipy.sparse.linalg.eigsh(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, mode='normal')

    强调我的。

    which : str [‘LM’ | ‘SM’ | ‘LA’ | ‘SA’ | ‘BE’]
    If A is a complex hermitian matrix, ‘BE’ is invalid. Which k eigenvectors and eigenvalues to find:
    ‘LM’ : Largest (in magnitude) eigenvalues
    ‘SM’ : Smallest (in magnitude) eigenvalues
    ‘LA’ : Largest (algebraic) eigenvalues
    ‘SA’ : Smallest (algebraic) eigenvalues
    ‘BE’ : Half (k/2) from each end of the spectrum
    

    因此,您可以指定which='LA',而不是默认的LM


    例子:

    In [19]: A = numpy.random.randn(5,5)
    
    In [20]: numpy.linalg.eig(A+A.T)[0] #Actual Eigenvalues
    Out[20]: array([ 3.32906012,  0.88700157, -1.16620472, -3.54512752, -2.43562899])
    
    In [21]: sp.eigsh(A+A.T,3)[0] #Three Largest (in Magnitude). What you don't want
    Out[21]: array([-3.54512752, -2.43562899,  3.32906012])
    
    In [22]: sp.eigsh(A+A.T,3,which='LA')[0] #Three Largest. What you do want
    
    Out[22]: array([-1.16620472,  0.88700157,  3.32906012])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-29
      • 1970-01-01
      • 2015-11-28
      • 2012-12-17
      • 1970-01-01
      • 2015-11-18
      • 2012-08-04
      • 2012-02-23
      相关资源
      最近更新 更多