numpy.linalg.eig

linalg.eig(a)[源代码]

计算一个方阵的特征值和右特征向量。

参数
a(…,m,m)数组

计算特征值和右特征向量的矩阵

返回
w(…,m)数组

特征值,每一个根据其多重性重复。特征值不一定是有序的。生成的数组将是复杂类型,除非虚部为零,在这种情况下,它将被转换为实数类型。什么时候? a 是真的,得到的特征值将是实的(0虚部)或以共轭对出现。

v(…,m,m)数组

归一化(单位“长度”)特征向量,以便 v[:,i] 特征向量是否与特征值相对应? w[i] .

加薪
LinAlgError

如果特征值计算不收敛。

参见

eigvals

非对称阵列的特征值。

eigh

实对称或复厄米特(共轭对称)阵列的特征值和特征向量。

eigvalsh

实对称或复厄米特(共轭对称)阵列的特征值。

scipy.linalg.eig

SciPy中的类似函数,也解决了广义特征值问题。

scipy.linalg.schur

酉矩阵和其他非厄米正规矩阵的最佳选择。

笔记

1.8.0 新版功能.

广播规则适用,见 numpy.linalg 有关详细信息的文档。

这是使用 _geev 计算一般方阵的特征值和特征向量的LAPACK程序。

数字 w 是的特征值 a 如果存在矢量 v 这样的话 a @ v = w * v . 因此,阵列 awv 满足方程式 a @ v[:,i] = w[i] * v[:,i] 对于 i \in \{{0,...,M-1\}} .

数组 v 特征向量的秩可能不是最大的,也就是说,有些列可能是线性相关的,尽管舍入误差可能会掩盖这一事实。如果特征值都是不同的,那么理论上特征向量是线性无关的 a 可以通过使用 v ,即, inv(v) @ a @ v 是对角线。

非Hermitian正规矩阵的SciPy函数 scipy.linalg.schur 因为矩阵 v 保证是单一的,使用时不是这样 eig . Schur分解产生一个上三角矩阵而不是一个对角矩阵,但对于正规矩阵,只需要上三角矩阵的对角,其余的是舍入误差。

最后,强调 v 包括 正确的 (如右侧)特征向量 a . 向量 y 令人满意的 y.T @ a = z * y.T 对于一些数字 z 被称为 left 特征向量 a 一般来说,矩阵的左、右特征向量不一定是彼此的(可能是共轭的)转置。

工具书类

斯特朗 线性代数及其应用 ,第2版,奥兰多,佛罗里达州,学术出版社,1980年,各种pp.

实例

>>> from numpy import linalg as LA

(几乎)具有实际e值和e向量的小例子。

>>> 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值和e向量;注意,e值是彼此的复数共轭。

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

具有实e值(但不包括复数e向量)的复数矩阵;注意 a.conj().T == a ,即 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.]])