eigh()和svd并没有给出相同的结果



考虑奇异值分解M=USV*。然后M*M的特征值分解得到M*M=V(S*S)V*=VS*U*USV*。我希望通过显示eigh函数返回的特征向量与svd函数返回的向量相同来验证numpy的等式:

# svd
U1,S1,V1=np.linalg.svd(M) 
S1=np.square(S1)
V1=V1.T
# eig
S2,V2=np.linalg.eigh(np.dot(M.T,M))
indx=np.argsort(S2)[::-1]
S2=S2[indx]
V2=V2[:,indx]

当我执行这个代码时,矢量只相差一个符号。示例:-

v1 = array([[-0.33872745,  0.94088454],
[-0.94088454, -0.33872745]])
and for v2:
v2 = array([[ 0.33872745, -0.94088454],
[ 0.94088454,  0.33872745]])

为什么这种差异会出现在特征向量中,以及如何解决?感谢您的帮助,提前谢谢!!

特征向量在符号更改之前是唯一的(请参阅https://math.stackexchange.com/questions/235396/eigenvalues-are-unique)。

符号的唯一性是因为$$A u=\lambda$$也适用于$$A(-u)=\lambda)(-u)$$。

相关内容

最新更新