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


谢谢!

===============>>#1 票数:1 已采纳

tl; dr:您可以按照文档中所述使用which='LA'标志。

我引用:

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 =无,OPinv =无,模式=“正常”)

强调我的。

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])

  ask by Mr Y translate from so

未解决问题?本站智能推荐:

2回复

寻找巨大稀疏矩阵的最大特征值

我试图找到一个令人难以置信的稀疏邻接矩阵的最大特征值。 我尝试过使用我看到的所有方法: 所有这三个实现在某些时候都会遇到类似的内存错误: 在尝试生成1.6PB numpy数组之后,大概是为了表示矩阵的密集表示。 显然,我没有这方面的记忆。 我确实有很多(128GB)。 是
1回复

稀疏特征值:scipy.sparse.linalg.eigs比scipy.linalg.eigvals慢

我有一个奇特的现象,虽然scipy.sparse.linalg.eigs应该是稀疏矩阵快,我得到它的运行速度比正常情况下慢eigvals的方法scipy : 因此方法calc_pde_numerical_jacobian构造了我的方程组雅可比calc_pde_numerical_jaco
1回复

计算python中非常大的稀疏矩阵的特征值

我有一个非常大的稀疏矩阵,表示马尔可夫链中的过渡马赛克,即矩阵的每一行的总和等于1,我有兴趣找到第一个特征值及其相应的小于1的向量。 我知道特征值在[-1,1]部分中有界,它们都是实数(非复数)。 我试图使用python的scipy.sparse.eigs函数计算值,但是,函数的一个参数是
1回复

在Python中计算稀疏矩阵的N个最小特征值

我想在Python中找到稀疏矩阵的N个最小特征值。 我尝试过使用scipy.sparse.linalg.eigen.arpack包,但在计算最小的特征值时速度非常慢。 我在某处看到有一个移位反转模式,但是当我尝试使用它时,我收到一条错误消息,告诉我还没有支持shift-invert模式。
1回复

在Python中读取对称的Harwell-Boeing矩阵

SciPy只能使用hb_read读取不对称矩阵。 有人知道是否可以在Python(3)中读取对称矩阵?
2回复

python scipy.sparse.linalg.eigs为连续调用提供不同的结果

我试图计算python中稀疏矩阵的谱半径 。 这就是我所拥有的: 其中w的值被缩放到[-1,1]的范围内。 但是,运行该命令每次都会产生不同的结果: 是什么赋予了? 我原以为每次都会这样。 我误解了这些命令是如何工作的吗?
1回复

python中的最小特征值

我想知道numpy是否有效实现计算对称矩阵的最大或最小特征值,如果可能的话没有完整的谱分解。 我发现以下模块实现了特征分解: scipy.linalg; numpy linalg; scipy稀疏linalg。 scipy / sparse / linalg
1回复

scipy eigh给出正半定矩阵的负特征值

我有一些问题scipy的eigh函数返回正半定矩阵的负特征值。 以下是MWE。 hess_R函数返回正半定矩阵(它是秩1矩阵和对角矩阵的总和,两者都具有非负条目)。 印刷的特征值是 如果我更换np.float64与np.float32在return语句hess_R我得到
2回复

如何找出对应于矩阵特定特征值的特征向量?

如何找出与特定特征值对应的特征向量? 我有一个随机矩阵(P),其中一个特征值是1.我需要找到对应于特征值1的特征向量。 scipy函数scipy.linalg.eig返回特征值和特征向量的数组。 这里D(值的数组)和V(矢量的数组)都是矢量。 一种方法是在D中进行搜索并
1回复

scipy.linalg.sparse.eigsh返回正半定矩阵的负和不一致特征值

我尝试使用scipy.linalg.sparse.eigsh (将其称为方法1:M1)来计算实对称半定矩阵W的拉普拉斯矩阵的最小特征值。 作为基准,我对scipy.linalg.eigh (方法2:M2)进行了计算。 M1似乎返回了与M2不同的特征值,而且这些特征值似乎是错误的。