问题描述
昨天在写课程作业的时候,需要对一个协方差矩阵计算其特征值和特征向量,但是在调用了Python的np.linalg.eig()函数后,
我发现其特征向量的结果并不正确,其中有些数值会变成正确值的相反数,或者部分数值之间会出现调换位置的情况。
并且让人绝望的是,别人跟我的输入是一样的,但是他却产生了正确的输出!
问题解决
在对代码检查了无数遍后,我确信自己的代码没有问题,于是问题的唯一可能来源就只能在eig()这个函数当中,想到我的python版本是3.7,于是我试着切换了我的python源到python 3.5,然后…问题就解决了…(室友版本是3.9,也能产生正确输出)
所以有可能python 3.7的numpy.linalg.eig()函数是有bug的,切换到别的版本就好啦
问题解决2
还有一种办法,使用scipy.linalg.eig()函数,同样可以得到正确输出,不过得到的结果一般是一个复数,后面使用的时候要使用实部。