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

Python numpy在我的计算机中产生错误的特征值和特征向量

如何解决Python numpy在我的计算机中产生错误的特征值和特征向量

我正在使用一个numpy来计算矩阵的特征值和特征向量,但是在本地计算机上我总是得到错误的结果。我的输入数组是:

ATA =np.array([[     56100,33750,350,-13434400,-6298800,-67340]
      [     33750,39025,365,-4105800,-40530]
      [       350,4,-67340,-40530,-421]
      [         0,56100,-6297800,-4104300,-40480]
      [         0,-5323650,-46800]
      [         0,-40480,-46800,-437]
      [ -13434400,-143294096,1988812200,21046240]
      [  -6298800,1463802300,13946640]
      [    -67340,-421,-437,21046240,13946640,136958]])

因此,当我运行np.linalg.eig(ATA)时,输出应为:

(array([ 5.20824997e+09,4.07454810e+08,7.42539687e+04,2.15085782e+04,1.47325883e+03,6.95623993e+02,1.00620174e+00,-2.34183896e-10,4.89068886e-03]),array([[ 2.84539953e-03,1.81479448e-03,-4.03677749e-01,8.40141629e-02,-1.62954584e-01,6.55925095e-01,-4.22667744e-01,4.28089963e-01,1.06176905e-01],[ 1.43790972e-03,-1.64731179e-03,-4.11218161e-01,8.20390032e-01,-1.04799961e-01,-3.83178690e-01,-2.95123482e-03,-3.17384527e-03,-5.22638141e-03],[ 1.50694971e-05,-1.03183136e-05,-3.89314681e-03,7.14037036e-03,-1.10215138e-02,5.07017350e-03,5.91938347e-01,3.92898770e-01,7.03580978e-01],[ 1.43759890e-03,-1.64599502e-03,7.08867672e-01,5.61266733e-01,1.50187808e-01,3.99898006e-01,-1.95860586e-03,1.11445719e-03,-1.27734452e-03],[ 1.17548483e-03,-6.81423034e-03,4.06683631e-01,-6.55054431e-02,-5.23337672e-01,-4.35335264e-01,-4.11520452e-01,4.32430093e-01,1.02594642e-01],[ 1.10796389e-05,-5.48396552e-05,4.32865661e-03,5.41689188e-04,-1.94131236e-02,6.27255853e-04,-4.22766929e-01,-5.91916200e-01,6.85935194e-01],[-8.83129590e-01,-4.69109327e-01,-2.08350880e-03,1.14444168e-03,-5.76087521e-04,3.54706596e-03,-1.71586709e-05,6.93819107e-06,-3.51316614e-05],[-4.69089792e-01,8.83088500e-01,3.43558431e-03,2.66295777e-03,-9.46771468e-03,-9.51037214e-04,3.67021032e-05,2.30158491e-05,-1.70205343e-04],[-4.82500030e-03,5.99890239e-03,-2.98470711e-03,-2.30397046e-02,8.15742461e-01,-2.71037947e-01,-3.50524557e-01,3.53550068e-01,1.12421281e-01]]))

但是在我的环境中,它取决于:

(array([ 2.80556520e+09,-1.48486833e+09,8.91358635e+04,3.12310662e+04,1.67293828e+04,1.45256927e+03,1.02287725e+00,1.71486141e-04,7.14907196e-02]),array([[ 4.53911407e-03,-5.12844789e-03,5.81815676e-01,4.03075138e-01,-3.54070037e-01,5.22579137e-02,-4.18346581e-01,-4.39977631e-01,4.77848175e-02],[ 2.46880709e-03,-1.97041290e-03,3.86847218e-01,1.97085313e-01,8.84776717e-01,1.69008001e-01,-4.91082887e-03,4.02327384e-03,-7.92374720e-03],[ 2.53995133e-05,-2.23326997e-05,3.95854042e-03,2.45012019e-03,6.76807972e-03,1.08295840e-02,6.12610346e-01,-5.13976174e-01,6.00293512e-01],[ 2.46815358e-03,-1.97050701e-03,-5.08932001e-01,8.30051437e-01,7.85246368e-02,-2.14057675e-01,-7.15437012e-05,-8.15717096e-04,2.31896436e-03],[ 2.39125344e-03,-2.86679627e-04,-4.90583621e-01,-1.62932815e-01,1.38557602e-01,5.87624795e-01,-4.12659947e-01,-4.43735069e-01,3.29341124e-02],[ 2.18983860e-05,-4.97622085e-06,-4.62793574e-03,2.95201534e-04,1.07051252e-03,1.95471546e-02,-3.95612985e-01,4.58193429e-01,7.95703714e-01],[-5.59185122e-01,-8.29039916e-01,-1.58639818e-03,-1.34262675e-03,7.05133701e-04,8.24587719e-06,2.26139620e-07,5.65965747e-09,4.33823831e-07],[-8.28977882e-01,5.59121133e-01,3.58122146e-03,8.59258680e-03,-1.73055059e-03,9.46280078e-03,2.88384523e-05,8.09952365e-06,-1.76507697e-04],[-8.31631249e-03,6.49815429e-03,-1.10014765e-01,-2.88224906e-01,2.57662176e-01,-7.59600488e-01,-3.50532044e-01,-3.67952844e-01,5.53810458e-02]]))

与我的意图有很大不同。有谁知道我为什么会得到不同的结果?我仔细检查了在线编译器的第一个输出,并确定这是正确的答案,那么为什么对于相同的代码我会得到不同的结果?

解决方法

嗯,这很愚蠢。显然,我在Windows中将ATA声明为int数组,而我运行的所有其他测试均在macOS和Linux中进行,因此这可能与这些OS存储大量数据的方式有关。因此,当我将ATA更改为浮点数组时,我得到了正确的特征值。

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