Python和Matlab中不同的特征向量
我需要你的帮助... 我正在尝试计算这个矩阵的特征向量:
0.683043 -0.0248989 0.291915 0.0220227 -0.350487 -0.318394
0.435584 0.276779 0.192531 -0.00158314 -0.653018 -0.182419
0.409294 -0.196908 0.321927 0.409339 -0.214044 -0.301017
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
在Matlab中,我用的是 [V,D] = eig([A; eye(d*(na-1),d*na)])
,得到的结果是:
而在Python中,我用的是 np.linalg.eig(np.block([[A], [np.eye((na-1)*d, na*d)]]))
,得到的结果是:
数值几乎是一样的,但最后两列的符号正好相反 :( 有没有办法得到完全相同的输出?我查阅了文档,但还是没能解决。
我尝试了不同的超参数和scipy函数,但结果还是不一样。
1 个回答
2
完全相反的符号意味着这个向量的方向是相反的,也就是说是正确的。特征向量告诉你一个新的轴的方向,用来描述这个矩阵(主成分分析PCA对此有很好的直观理解),所以出现负值也是正确的。
举个例子:在笛卡尔坐标系中,下面三个向量中哪一个定义了x轴:[1,0]、[-1,0]、[0,1]。答案是:[1, 0]和[-1, 0]都可以定义x轴。
有没有办法得到相同的值?没有,这取决于特征向量计算的实现方式,所以你不能强制得到某一个结果。你用来比较或验证它们的代码要对此保持灵活。需要注意的是,有些情况下(取决于数据),它们的顺序也可能不同。