NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.linalg.eigh
numpy.linalg.
eigh
(a,UPLO ='L' )[源代码] ¶返回复数Hermitian(共轭对称)或实对称矩阵的特征值和特征向量。
返回两个对象,一个包含a的特征值的一维数组,以及一个对应的特征向量(以列为单位)的二维正方形数组或矩阵(取决于输入类型)。
要计算其特征值和特征向量的Hermitian或实对称矩阵。
指定的计算是否与的下三角部分进行一个(“L”,缺省值)或上三角部分(“U”)。不管该值如何,在计算中仅考虑对角线的实部以保留厄米矩阵的概念。因此得出结论,对角线的虚部将始终被视为零。
特征值按升序排列,每个都根据其多重性重复。
该列是对应于特征值的归一化特征向量。如果a是矩阵对象,将返回一个矩阵对象。v[:, i]
w[i]
如果特征值计算不收敛。
笔记
1.8.0版中的新功能。
广播规则适用,numpy.linalg
有关详细信息,请参阅文档。
特征值/特征向量使用LAPACK程序计算_syevd
,
_heevd
。
实对称或复Hermitian矩阵的特征值始终为实。[1](列)特征向量的数组v为unit,并且a,w和v满足方程
。dot(a, v[:, i]) = w[i] * v[:, i]
参考文献
G.Strang,“ 线性代数及其应用”,第二版,佛罗里达州奥兰多,Academic Press,Inc.,1980年,第5页。222。
例子
>>> from numpy import linalg as LA
>>> a = np.array([[1, -2j], [2j, 5]])
>>> a
array([[ 1.+0.j, -0.-2.j],
[ 0.+2.j, 5.+0.j]])
>>> w, v = LA.eigh(a)
>>> w; v
array([0.17157288, 5.82842712])
array([[-0.92387953+0.j , -0.38268343+0.j ], # may vary
[ 0. +0.38268343j, 0. -0.92387953j]])
>>> np.dot(a, v[:, 0]) - w[0] * v[:, 0] # verify 1st e-val/vec pair
array([5.55111512e-17+0.0000000e+00j, 0.00000000e+00+1.2490009e-16j])
>>> np.dot(a, v[:, 1]) - w[1] * v[:, 1] # verify 2nd e-val/vec pair
array([0.+0.j, 0.+0.j])
>>> A = np.matrix(a) # what happens if input is a matrix object
>>> A
matrix([[ 1.+0.j, -0.-2.j],
[ 0.+2.j, 5.+0.j]])
>>> w, v = LA.eigh(A)
>>> w; v
array([0.17157288, 5.82842712])
matrix([[-0.92387953+0.j , -0.38268343+0.j ], # may vary
[ 0. +0.38268343j, 0. -0.92387953j]])
>>> # demonstrate the treatment of the imaginary part of the diagonal
>>> a = np.array([[5+2j, 9-2j], [0+2j, 2-1j]])
>>> a
array([[5.+2.j, 9.-2.j],
[0.+2.j, 2.-1.j]])
>>> # with UPLO='L' this is numerically equivalent to using LA.eig() with:
>>> b = np.array([[5.+0.j, 0.-2.j], [0.+2.j, 2.-0.j]])
>>> b
array([[5.+0.j, 0.-2.j],
[0.+2.j, 2.+0.j]])
>>> wa, va = LA.eigh(a)
>>> wb, vb = LA.eig(b)
>>> wa; wb
array([1., 6.])
array([6.+0.j, 1.+0.j])
>>> va; vb
array([[-0.4472136 +0.j , -0.89442719+0.j ], # may vary
[ 0. +0.89442719j, 0. -0.4472136j ]])
array([[ 0.89442719+0.j , -0. +0.4472136j],
[-0. +0.4472136j, 0.89442719+0.j ]])