scipy.sparse.linalg.eigsh

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')[源代码]

求实对称方阵或复厄米特矩阵A的k个特征值和特征向量。

解算 A * x[i] = w[i] * x[i] ,w的标准特征值问题。 [i] 具有相应特征向量x的特征值 [i] 。

如果指定了M,则解 A * x[i] = w[i] * M * x[i] ,w的广义特征值问题。 [i] 具有相应特征向量x的特征值 [i] 。

请注意,对于A是复埃尔米特矩阵的情况,没有专门的例程。在这种情况下, eigsh() 会打电话给你 eigs() 并返回由此获得的特征值的实部。

参数
Andarray、稀疏矩阵或线性运算符

表示运算的平方运算符 A * x ,在哪里 A 是实对称的或复埃尔米特的。对于屈曲模式(见下文) A 另外必须是肯定的。

k整型,可选

所需的特征值和特征向量的数量。 k 必须小于N。不可能计算矩阵的所有特征向量。

退货
w阵列

k个特征值的数组。

v阵列

一个数组,该数组表示 k 特征向量。该栏目 v[:, i] 是与特征值相对应的特征向量 w[i]

其他参数
M表示以下内容的N x N矩阵、数组、稀疏矩阵或线性运算符

手术 M @ x 关于广义特征值问题

A@x=w*M@x。

如果A是实数,M一定表示实对称矩阵;如果A是复数,M一定表示复埃尔米特矩阵。为获得最佳结果,M的数据类型应与A的数据类型相同。此外:

如果σ为无,则M是对称正定的。

如果指定sigma,则M是对称半正定的。

在屈曲模式下,M是对称不定的。

如果sigma为NONE,则eigsh需要运算符来计算线性方程的解 M @ x = b 。这在内部通过对显式矩阵M的(稀疏)LU分解,或通过对一般线性运算符的迭代求解器来完成。或者,用户可以提供矩阵或运算符Minv,该矩阵或运算符Minv给出 x = Minv @ b = M^-1 @ b

sigma真实

使用Shift-Invert模式查找sigma附近的特征值。这需要算子来计算线性系统的解 [A - sigma * M] x = b ,其中M为单位矩阵(如果未指定)。这是通过显式矩阵A和M的(稀疏)LU分解在内部计算的,或者如果A或M是一般线性运算符,则通过迭代求解器计算。或者,用户可以提供矩阵或运算符OPinv,其给出 x = OPinv @ b = [A - sigma * M]^-1 @ b 。请注意,当指定sigma时,关键字‘this’指的是移位的特征值 w'[i] 其中:

如果MODE==‘NORMAL’, w'[i] = 1 / (w[i] - sigma)

如果MODE==‘Cayley’, w'[i] = (w[i] + sigma) / (w[i] - sigma)

如果模式==‘屈曲’, w'[i] = w[i] / (w[i] - sigma)

(请参阅下面“模式”中的进一步讨论)

v0ndarray,可选

迭代的起始向量。默认值:随机

ncv整型,可选

生成的Lanczos向量的个数ncv必须大于k小于n,建议 ncv > 2*k 。默认值: min(n, max(2*k + 1, 20))

which应力 [‘LM’|‘SM’|‘LA’|‘SA’|‘BE’]

如果A是复厄米特矩阵,则‘be’无效。哪一个 k 要查找的特征向量和特征值:

‘LM’:最大(量值)特征值。

‘sm’:最小(量值)特征值。

‘la’:最大(代数)特征值。

“Sa”:最小(代数)特征值。

‘Be’:频谱两端的一半(k/2)。

当k为奇数时,从高端再返回一个(k/2+1)。当sigma!=None时,‘Which’指的是移位的特征值 w'[i] (见上文“sigma”中的讨论)。ARPACK通常更善于查找较大的值而不是较小的值。如果需要较小的特征值,请考虑使用移位反转模式以获得更好的性能。

maxiter整型,可选

允许的Arnoldi更新迭代的最大次数。默认值: n*10

tol浮动

特征值的相对精度(停止标准)。默认值0表示机器精度。

MinvN x N矩阵、数组、稀疏矩阵或线性运算符

请参阅上面M中的注释。

OPinvN x N矩阵、数组、稀疏矩阵或线性运算符

请参阅上文西格玛中的注释。

return_eigenvectors布尔尔

除返回特征值外,还返回特征向量(True)。该值确定特征值的排序顺序。排序顺序还取决于 which 变量。

对于其=‘LM’或‘SA’:

如果 return_eigenvectors 为True,则特征值按代数值排序。

如果 return_eigenvectors 为False,则特征值按绝对值排序。

对于其=‘BE’或‘LA’:

特征值总是按代数值排序。

对于其=‘SM’:

如果 return_eigenvectors 为True,则特征值按代数值排序。

如果 return_eigenvectors 为False,则特征值按绝对值递减排序。

mode字符串 [‘正常’|‘弯曲’|‘凯利’]

指定用于Shift-Invert模式的策略。此参数仅适用于实值A和sigma!=None。对于移位-反转模式,ARPACK内部求解特征值问题 OP * x'[i] = w'[i] * B * x'[i] 并将所得到的里兹矢量x‘ [i] 和里兹值w‘ [i] 转化为问题的期望特征向量和特征值 A * x[i] = w[i] * M * x[i] 。模式如下:

‘正常’:

操作= [A - sigma * M] ^-1@M,B=M,w‘ [i] =1/(宽 [i] -sigma)

“屈曲”:

操作= [A - sigma * M] ^-1@A,B=A,w‘ [i] =w [i] /(w [i] -sigma)

“开利”:

操作= [A - sigma * M] ^-1@ [A + sigma * M] ,B=M,w‘ [i] =(w [i] +sigma)/(w [i] -sigma)

模式的选择将影响关键字‘Which’选择哪些特征值,并且还可能影响收敛的稳定性(请参见 [2] 以供讨论)。

加薪
ArpackNoConvergence

当未获得所请求的收敛时。

当前收敛的特征值和特征向量可以如下所示 eigenvalueseigenvectors 异常对象的属性。

参见

eigs

一般(非对称)矩阵A的特征值和特征向量

svds

矩阵A的奇异值分解

注意事项

此函数是ARPACK的包装 [1] SSEUPD和DSEUPD函数,它们使用隐式重新启动的Lanczos方法来求特征值和特征向量 [2].

参考文献

1

ARPACK软件,http://www.caam.rice.edu/software/ARPACK/

2

R.B.Lehoucq,D.C.Sorensen,和C.Yang,ARPACK用户指南:用隐式重启Arnoldi方法求解大规模特征值问题。暹罗,费城,宾夕法尼亚州,1998。

示例

>>> from scipy.sparse.linalg import eigsh
>>> identity = np.eye(13)
>>> eigenvalues, eigenvectors = eigsh(identity, k=6)
>>> eigenvalues
array([1., 1., 1., 1., 1., 1.])
>>> eigenvectors.shape
(13, 6)