【问题标题】:Why don't my eigenvalues for A*Atranspose and Atranspose*A match?为什么我的 A*A Transpose 和 A Transpose*A 的特征值不匹配?
【发布时间】:2020-02-10 09:18:07
【问题描述】:
  import numpy as np
    import matplotlib.pyplot as plt
    import scipy.linalg as la
    A = np.array([[-5,-5,-1,0,0,0,500,500,100],
        [0,0,0,-5,-5,-1,500,500,100],
        [-150,-5,-1,0,0,0,30000,1000,80],
        [0,0,0,-150,-5,-1,12000,400,80],
        [-150,-150,-1,0,0,0,33000,33000,220],
        [0,0,0,-150,-150,-1,12000,12000,80],
        [-5,-150,-1,0,0,0,500,15000,100],
        [0,0,0,-5,-150,-1,1000,30000,200]])

    print("Matrix A is :\n", A)
    A_Trans=np.transpose(A)
    print("Transpose is:\n",A_Trans)
    prod1=np.dot(A,A_Trans)
    print(prod1)
    u,v = la.eigh(prod1)
    print("Eigen values of AAT are \n",np.abs(u))
    print("Corresponding eigenvectors of AAT in the columns: \n",np.abs(v))
    prod2=np.dot(A_Trans,A)
    print(prod2)
    w,x = la.eigh(prod2)
    print("Eigen values of ATA are \n",np.abs(w))
    print("Corresponding eigenvectors of ATA in the columns: \n",np.abs(x))

这是我得到的输出。为了保持帖子整洁,我省略了一些输出。

Eigen values of AAT are 
 [2.85018004e+09 4.52373040e+00 2.19731826e+03 1.84822781e+04
 2.46139762e+04 4.52427374e+04 1.01150754e+09 2.18234247e+09]

Eigen values of ATA are 
 [3.28219743e+09 6.70266037e+08 2.95889936e-01 1.23330275e+00
 9.79916827e+03 2.20387805e+04 3.06750605e+04 7.13857850e+04
 1.12278371e+06]

我考虑过使用 svd 功能,但我想自己尝试一下。但是,它在 MATLAB 中工作得很好,但在 python 中却不行。此外,当我输入像 2X2 这样的较小矩阵时,它工作正常。我究竟做错了什么?

【问题讨论】:

  • 在问题中包含输出。
  • @WarrenWeckesser 我刚刚更新了帖子。
  • 给定A的形状是(8,9)prod1的形状应该是(8,8)prod2应该是(9,9)吧?
  • @paul-shuvo,你是对的!
  • 你在 Matlab 中使用的是同一个变量吗?

标签: python numpy svd


【解决方案1】:

这没有给你所有相同的值的原因是A 是一个 8 x 9 矩阵。这意味着np.dot(A,A_Trans) 给您一个 8 x 8 矩阵,而np.dot(A_Trans,A) 给您一个 9 x 9 矩阵(这是因为矩阵乘法规则)。

8x8 矩阵无法与 9x9 矩阵具有相同的特征值,因为一个有 8 个特征值,另一个有 9 个。这甚至反映在您的更新中,其中一个列表有 8 个值,并且另一个有 9 个。

【讨论】:

  • Afaik 即使两个矩阵的形状不同,其中一个特征值将是 0,这可以通过 MATLAB 验证。
  • 所以,特征值的数量是一样的,而不是值本身?
  • 当我在我的计算机上运行此代码时,我实际上确实得到了一个零特征向量(以及 9.35593752e-08),并且除了具有该零特征值之外,所有其他的都是相同的。运行给定代码时,我的结果与问题中的结果不匹配。
  • @paul-shuvo,实际上是相反的,特征值的个数会不同(分别为 8 和 9)但值会相同。
  • @MattWerenski 我不确定您如何获得相同的值。另外,我刚刚在我的系统上再次运行了代码,它给了我与上面发布的相同的输出。你能把你的输出贴在这里吗?
猜你喜欢
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 1970-01-01
  • 2014-03-29
  • 1970-01-01
  • 1970-01-01
  • 2020-07-07
相关资源
最近更新 更多