Numpy中的特征向量:非常糟糕的数字?我做错什么了吗?

var*_*tir 1 python numpy numeric matrix linear-algebra

对于某些计算,我需要一个特征值分解.现在我试着评估numpy的功能,并注意到有一个非常糟糕的行为!看这个:

import numpy as np
N = 3
A = np.matrix(np.random.random([N,N]))
A = 0.5*(A.H + A) #Hermetian part
la, V = np.linalg.eig(A)
VI = np.matrix(np.linalg.inv(V))
V =  np.matrix(V)
Run Code Online (Sandbox Code Playgroud)

/编辑:我现在选择了一个hermetian Matrix,这很正常.

数学表明我们应该具有VI*VH = 1,并且VH*A*V = VI*A*V = D,其中D是特征值的对角矩阵.我从随机矩阵得到的结果是:

print(A.H*A - A*A.H)
[[ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]
Run Code Online (Sandbox Code Playgroud)

这表明A是正常的.

print(V.H*A*V)
[[  1.71513832e+00   5.55111512e-17  -1.11022302e-16]
 [ -1.11022302e-16  -5.17694280e-01   0.00000000e+00]
 [ -7.63278329e-17  -4.51028104e-17   1.28559996e-01]]

print(VI*A*V)
[[  1.71513832e+00  -2.77555756e-16  -2.22044605e-16]
 [  7.49400542e-16  -5.17694280e-01  -4.16333634e-17]
 [ -3.33066907e-16   1.70002901e-16   1.28559996e-01]]
Run Code Online (Sandbox Code Playgroud)

这两个工作正确,因为非对角线非常小,在对角线上我们有特征值.

print(VI*V.H)
[[ 0.50868822 -0.57398479  0.64169912]
 [ 0.16362266  0.79620605  0.58248052]
 [-0.84525968 -0.19130446  0.49893755]]
Run Code Online (Sandbox Code Playgroud)

这应该是一个,但它远离它.

那么大家,现在告诉我,在制作特征向量时出了什么问题,即使在这个小例子中?任何人都可以告诉我在使用这个功能时我必须关心什么,以及我可以对付这个伟大的错配?

pv.*_*pv. 6

numpy.linalg.eig文档:

同样地,如果矩阵a是正常的,即,如果点(a,aH)=点(aH,a),则特征向量v的(复值)矩阵是单一的,其中aH表示a的共轭转置.

显然,在你所拥有的例子中,A^H A != A A^H矩阵V不是单一的.因此,V.T.conj()与倒数无关V.这种假设正确的最常见情况是厄米特矩阵.

  • “可对角化”和“可通过酉矩阵对角化”是不同的东西。 (2认同)