原文:https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.eig.html
校对:(虚位以待)
numpy.linalg.
eig
(a)[source]计算正方形数组的特征值和右特征向量。
参数: | a:(...,M,M)数组
|
---|---|
返回: | w:(...,M)数组
v:(...,M,M)数组
|
引发: | LinAlgError
|
注
版本1.8.0中的新功能。
广播规则适用,有关详细信息,请参阅numpy.linalg
文档。
这是使用_geev LAPACK例程来实现的,其计算一般方阵数组的特征值和特征向量。
The number w is an eigenvalue of a if there exists a vector v such that dot(a,v) = w * v
. Thus, the arrays a, w, and v satisfy the equations dot(a[:,:], v[:,i]) = w[i] * v[:,i]
for .
特征向量的数组v可能不是最大秩,即,一些列可以是线性相关的,尽管舍入误差可能模糊该事实。如果特征值全部不同,则理论上特征向量是线性无关的。Likewise, the (complex-valued) matrix of eigenvectors v is unitary if the matrix a is normal, i.e., if dot(a, a.H) = dot(a.H, a)
, where a.H denotes the conjugate transpose of a.
最后,要强调的是,v由a的右侧(如右侧)特征向量组成。A vector y satisfying dot(y.T, a) = z * y.T
for some number z is called a left eigenvector of a, and, in general, the left and right eigenvectors of a matrix are not necessarily the (perhaps conjugate) transposes of each other.
参考文献
G.Strang,Linear Algebra and Its Applications,第2版,Orlando,FL,Academic Press,Inc.,1980,
例子
>>> 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.00000000-0.70710678j, 0.00000000+0.70710678j]])
具有真实e值(但复值e向量)的复值矩阵;注意a.conj()。T = a,即a是Hermitian。
>>> a = np.array([[1, 1j], [-1j, 1]])
>>> w, v = LA.eig(a)
>>> w; v
array([ 2.00000000e+00+0.j, 5.98651912e-36+0.j]) # i.e., {2, 0}
array([[ 0.00000000+0.70710678j, 0.70710678+0.j ],
[ 0.70710678+0.j , 0.00000000+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.]])