微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

eigh() 和 svd 不会给出相同的结果

如何解决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) $$。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。