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
当未获得所请求的收敛时。
当前收敛的特征值和特征向量可以如下所示
eigenvalues
和eigenvectors
异常对象的属性。
注意事项
此函数是ARPACK的包装 [1] SSEUPD和DSEUPD函数,它们使用隐式重新启动的Lanczos方法来求特征值和特征向量 [2].
参考文献
示例
>>> 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)