Python和Matlab中不同的特征向量

1 投票
1 回答
53 浏览
提问于 2025-04-14 18:26

我需要你的帮助... 我正在尝试计算这个矩阵的特征向量:

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)]),得到的结果是:

Matlab 结果

而在Python中,我用的是 np.linalg.eig(np.block([[A], [np.eye((na-1)*d, na*d)]])),得到的结果是:

Python 结果

数值几乎是一样的,但最后两列的符号正好相反 :( 有没有办法得到完全相同的输出?我查阅了文档,但还是没能解决。

我尝试了不同的超参数和scipy函数,但结果还是不一样。

1 个回答

2

完全相反的符号意味着这个向量的方向是相反的,也就是说是正确的。特征向量告诉你一个新的轴的方向,用来描述这个矩阵(主成分分析PCA对此有很好的直观理解),所以出现负值也是正确的。

举个例子:在笛卡尔坐标系中,下面三个向量中哪一个定义了x轴:[1,0]、[-1,0]、[0,1]。答案是:[1, 0]和[-1, 0]都可以定义x轴。

有没有办法得到相同的值?没有,这取决于特征向量计算的实现方式,所以你不能强制得到某一个结果。你用来比较或验证它们的代码要对此保持灵活。需要注意的是,有些情况下(取决于数据),它们的顺序也可能不同。

撰写回答