NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.linalg.eig
numpy.linalg.
eig
(a )[来源] ¶计算方阵的特征值和右特征向量。
将为其计算特征值和右特征向量的矩阵
特征值,每个特征值根据其多重性重复。特征值不一定是有序的。除非虚部为零,否则所得数组将为复数类型,在这种情况下,它将被强制转换为实数类型。当a 为实数时,所得特征值将为实数(0虚部)或出现在共轭对中
归一化的(单位“长度”)特征向量,使得列v[:,i]
是对应于特征值的特征向量w[i]
。
如果特征值计算不收敛。
笔记
1.8.0版中的新功能。
广播规则适用,numpy.linalg
有关详细信息,请参阅文档。
这是通过使用_geev
LAPACK例程来实现的,该例程计算通用方阵的特征值和特征向量。
数瓦特是的特征值一个,如果存在一个矢量
v,使得。因此,该阵列一个,瓦特,并且
v满足式
为。dot(a,v) = w * v
dot(a[:,:], v[:,i]) = w[i] * v[:,i]
特征向量的数组v可能不会具有最大秩,也就是说,尽管舍入误差可能会掩盖这一事实,但某些列可能与线性相关。如果特征值都不同,则理论上特征向量是线性独立的。同样,特征向量的(复值)矩阵v是酉如果基质一个是正常的,即,如果,其中AH表示的共轭转置一个。dot(a, a.H) = dot(a.H, a)
最后,需要强调的是v组成的右侧(如右侧)的特征向量一个。载体ÿ满足
某些数目ž被称为左侧
的特征向量一个,并且,在一般情况下,矩阵的左和右本征向量不一定彼此的(可能共轭)转置。dot(y.T, a) = z * y.T
参考文献
G.Strang,《线性代数及其应用》,第二版,佛罗里达州奥兰多,Academic Press,Inc.,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是埃尔米特式的。a.conj().T == 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.]])