Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B)

Matlab VS Python-eig(A,B)VS sc.linalg.eig(A,B),python,matlab,numpy,scipy,eigenvalue,Python,Matlab,Numpy,Scipy,Eigenvalue,我有以下矩阵sigma和sigmad: 西格玛: 1.9958 0.7250 0.7250 1.3167 西格玛: 4.8889 1.1944 1.1944 4.2361 如果我尝试用python解决广义特征值问题,我得到: d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma)) [V,d]=eig(sigmad,sigma) 五: 如果我试着解g。Ematlab中的问题我得到:

我有以下矩阵sigma和sigmad:

西格玛:

    1.9958   0.7250
    0.7250   1.3167
西格玛:

    4.8889   1.1944
    1.1944   4.2361
如果我尝试用python解决广义特征值问题,我得到:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))
    [V,d]=eig(sigmad,sigma)
五:

如果我试着解g。Ematlab中的问题我得到:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))
    [V,d]=eig(sigmad,sigma)
五:

但是d的值是一致的。

特征向量的任何(非零)标量倍数也将是特征向量;只有方向是有意义的,而不是整体的规范化。不同的例程使用不同的约定——通常您会看到大小设置为1,或最大值设置为1或-1——而一些例程甚至出于性能原因而不考虑内部一致性。您的两个不同结果是彼此的倍数:

In [227]: sc = array([[-1., -0.5614], [-0.4352,  1.    ]])

In [228]: ml = array([[-.5897, -0.5278], [-0.2564, 0.94]])

In [229]: sc/ml
Out[229]: 
array([[ 1.69577751,  1.06366048],
       [ 1.69734789,  1.06382979]])
所以它们实际上是相同的特征向量。把矩阵想象成一个改变向量的算子:特征向量是指向那个方向的向量不会被矩阵扭曲的特殊方向,特征值是测量矩阵对向量的伸缩程度的因子