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

时间:2012-07-27 16:34:02

标签: python matlab numpy scipy eigenvalue

我有以下矩阵sigma和sigmad:

西格玛:

    1.9958   0.7250
    0.7250   1.3167

sigmad:

    4.8889   1.1944
    1.1944   4.2361

如果我尝试解决python中的广义特征值问题,我得到:

    d,V = sc.linalg.eig(matrix(sigmad),matrix(sigma))

N:

    -1     -0.5614
    -0.4352    1

如果我试着解决这个问题。即matlab中的问题我得到了:

    [V,d]=eig(sigmad,sigma)

V:

    -0.5897    -0.5278
    -0.2564    0.9400

但是d确实很重要。

1 个答案:

答案 0 :(得分:12)

特征向量的任何(非零)标量倍数也将是特征向量;只有方向是有意义的,而不是整体正常化。不同的例程使用不同的约定 - 通常你会看到幅度设置为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]])

因此它们实际上是相同的特征向量。将矩阵看作是改变向量的算子:特征向量是指向那条路的向量不会被矩阵扭曲的特殊方向,而特征值是衡量矩阵扩展或收缩向量的因素。