本文简要介绍 python 语言中 numpy.linalg.eig
的用法。
用法:
linalg.eig(a)
计算方阵的特征值和右特征向量。
- a: (…, M, M) 数组
将计算特征值和右特征向量的矩阵
- w: (…, M) 数组
特征值,每个都根据其多重性重复。特征值不一定是有序的。结果数组将是复数类型,除非虚部为零,在这种情况下它将被强制转换为实数类型。当 a 为实数时,得到的特征值将是实数(0 虚部)或以共轭对形式出现
- v: (…, M, M) 数组
归一化(单元“length”)特征向量,使得列
v[:,i]
是对应于特征值w[i]
的特征向量。
- LinAlgError
如果特征值计算不收敛。
参数:
返回:
抛出:
注意:
广播规则适用,有关详细信息,请参阅
numpy.linalg
文档。这是使用
_geev
LAPACK 例程来实现的,该例程计算一般方阵的特征值和特征向量。号码w是一个特征值a如果存在向量v这样
a @ v = w * v
.因此,数组a,w, 和v满足方程a @ v[:,i] = w[i] * v[:,i]
为了 .数组v的特征向量可能不是最大秩,也就是说,一些列可能是线性相关的,尽管舍入误差可能会掩盖这一事实。如果特征值都不同,那么理论上特征向量是线性独立的,并且a可以通过使用相似变换对角化v, IE,
inv(v) @ a @ v
是对角线。对于非 Hermitian 正规矩阵,SciPy 函数
scipy.linalg.schur
是首选,因为矩阵v保证是幺正的,使用的时候不是这样eig
. Schur 分解产生上三角矩阵而不是对角矩阵,但对于正规矩阵,只需要上三角矩阵的对角线,其余的是舍入误差。最后要强调的是v由正确的(如右侧)的特征向量a.一个向量y令人满意的
y.T @ a = z * y.T
对于一些数字z被称为剩下的特征向量a,并且,一般来说,矩阵的左右特征向量不一定是彼此的(可能是共轭的)转置。参考:
G. Strang,线性代数及其应用,第 2 版,佛罗里达州奥兰多,学术出版社,1980 年,各种 pp。
例子:
>>> from numpy import linalg as LA
(几乎)真实的e-values和e-vectors的简单例子。
>>> w, v = LA.eig(np.diag((1, 2, 3))) >>> w; v array([1., 2., 3.]) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
具有复数e-values和e-vectors的实矩阵;请注意,e-values 是彼此的复共轭。
>>> w, v = LA.eig(np.array([[1, -1], [1, 1]])) >>> w; v array([1.+1.j, 1.-1.j]) array([[0.70710678+0.j , 0.70710678-0.j ], [0. -0.70710678j, 0. +0.70710678j]])
Complex-valued 矩阵与实数 e-values(但 complex-valued e-vectors);注意
a.conj().T == a
, IE。,a是厄米特。>>> a = np.array([[1, 1j], [-1j, 1]]) >>> w, v = LA.eig(a) >>> w; v array([2.+0.j, 0.+0.j]) array([[ 0. +0.70710678j, 0.70710678+0.j ], # may vary [ 0.70710678+0.j , -0. +0.70710678j]])
小心舍入错误!
>>> a = np.array([[1 + 1e-9, 0], [0, 1 - 1e-9]]) >>> # Theor. e-values are 1 +/- 1e-9 >>> w, v = LA.eig(a) >>> w; v array([1., 1.]) array([[1., 0.], [0., 1.]])
相关用法
- Python numpy linalg.eigh用法及代码示例
- Python numpy linalg.eigvals用法及代码示例
- Python numpy linalg.eigvalsh用法及代码示例
- Python numpy linalg.svd用法及代码示例
- Python numpy linalg.pinv用法及代码示例
- Python numpy linalg.tensorinv用法及代码示例
- Python numpy linalg.LinAlgError用法及代码示例
- Python numpy linalg.matrix_rank用法及代码示例
- Python numpy linalg.solve用法及代码示例
- Python numpy linalg.det用法及代码示例
- Python numpy linalg.cond用法及代码示例
- Python numpy linalg.inv用法及代码示例
- Python numpy linalg.lstsq用法及代码示例
- Python numpy linalg.norm用法及代码示例
- Python numpy linalg.slogdet用法及代码示例
- Python numpy linalg.multi_dot用法及代码示例
- Python numpy linalg.tensorsolve用法及代码示例
- Python numpy linalg.qr用法及代码示例
- Python numpy linalg.matrix_power用法及代码示例
- Python numpy linalg.cholesky用法及代码示例
- Python numpy linspace用法及代码示例
- Python numpy lib.NumpyVersion用法及代码示例
- Python numpy lib.Arrayterator用法及代码示例
- Python numpy legendre.legint用法及代码示例
- Python numpy laguerre.lagone用法及代码示例
注:本文由纯净天空筛选整理自numpy.org大神的英文原创作品 numpy.linalg.eig。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。