scipy.sparse.linalg.

特征值#

scipy.sparse.linalg.eigs(A, k=6, M=None, sigma=None, which='LM', v0=None, ncv=None, maxiter=None, tol=0, return_eigenvectors=True, Minv=None, OPinv=None, OPpart=None)[源代码][源代码]#

找到方阵 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] 的广义特征值问题。

参数:
Andarray、稀疏矩阵或线性算子

一个数组、稀疏矩阵或表示运算 A @ x 的线性算子,其中 A 是一个实数或复数的方阵。

kint, 可选

所需的特征值和特征向量的数量。k 必须小于 N-1。无法计算矩阵的所有特征向量。

Mndarray、稀疏矩阵或 LinearOperator,可选

表示广义特征值问题中操作 M@x 的数组、稀疏矩阵或线性算子

A @ x = w * M @ x.

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

如果 sigma 是 None,M 是正定矩阵

如果指定了 sigma,M 是半正定的。

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

sigma实数或复数,可选

使用移位-反转变换模式查找接近sigma的特征值。这需要一个算子来计算线性系统 [A - sigma * M] @ x = b 的解,其中如果未指定,M是单位矩阵。这是通过内部计算的(稀疏)LU分解来实现的,对于显式矩阵A和M,或者通过迭代求解器来实现,如果A或M是广义线性算子。或者,用户可以提供矩阵或算子OPinv,它给出 x = OPinv @ b = [A - sigma * M]^-1 @ b。对于实矩阵A,移位-反转变换可以在虚模式或实模式下完成,由参数OPpart(’r’或’i’)指定。请注意,当指定sigma时,关键字’which’(如下)指的是移位的特征值 w'[i] 其中:

如果 A 是实数且 OPpart == ‘r’(默认),

w'[i] = 1/2 * [1/(w[i]-sigma) + 1/(w[i]-conj(sigma))].

如果 A 是实数且 OPpart == ‘i’,

w'[i] = 1/2i * [1/(w[i]-sigma) - 1/(w[i]-conj(sigma))].

如果 A 是复数,w'[i] = 1/(w[i]-sigma)

v0ndarray,可选

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

ncvint, 可选

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

哪个str, [‘LM’ | ‘SM’ | ‘LR’ | ‘SR’ | ‘LI’ | ‘SI’], 可选

要找到哪些 k 个特征向量和特征值:

‘LM’ : 最大幅值

‘SM’ : 最小量级

‘LR’ : 最大实部

‘SR’ : 最小实部

‘LI’ : 最大虚部

‘SI’ : 最小的虚部

当 sigma != None 时,’which’ 指的是移位后的特征值 w’[i](参见上文 ‘sigma’ 的讨论)。ARPACK 通常更擅长找到大值而不是小值。如果需要小特征值,考虑使用移位-反演模式以获得更好的性能。

maxiterint, 可选

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

tolfloat, 可选

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

return_eigenvectorsbool, 可选

返回特征向量(True)以及特征值

Minvndarray、稀疏矩阵或 LinearOperator,可选

参见上方 M 中的注释。

OPinvndarray、稀疏矩阵或 LinearOperator,可选

参见上方 sigma 中的注释。

OPpart{‘r’ 或 ‘i’}, 可选

参见上方sigma中的注释

返回:
wndarray

k 个特征值的数组。

vndarray

一个包含 k 个特征向量的数组。v[:, i] 是对应于特征值 w[i] 的特征向量。

Raises:
ArpackNoConvergence

当未达到请求的收敛时。当前已收敛的特征值和特征向量可以在异常对象的 eigenvalueseigenvectors 属性中找到。

参见

eigsh

对称矩阵 A 的特征值和特征向量

svds

矩阵 A 的奇异值分解

注释

此函数是对 ARPACK [1] SNEUPD, DNEUPD, CNEUPD, ZNEUPD 函数的封装,这些函数使用隐式重启 Arnoldi 方法来寻找特征值和特征向量 [2]

参考文献

[1]

ARPACK 软件, opencollab/arpack-ng

[2]

R. B. Lehoucq, D. C. Sorensen, and C. Yang, ARPACK USERS GUIDE: Solution of Large Scale Eigenvalue Problems by Implicitly Restarted Arnoldi Methods. SIAM, Philadelphia, PA, 1998.

示例

找到单位矩阵的6个特征向量:

>>> import numpy as np
>>> from scipy.sparse.linalg import eigs
>>> id = np.eye(13)
>>> vals, vecs = eigs(id, k=6)
>>> vals
array([ 1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j,  1.+0.j])
>>> vecs.shape
(13, 6)