【问题标题】:Numpy seems to produce incorrect eigenvectorsNumpy 似乎产生了不正确的特征向量
【发布时间】:2014-10-27 14:11:59
【问题描述】:

我想用 Numpy 来计算特征值和特征向量。这是我的代码:

import numpy as np
from numpy import linalg as LA

lapl = np.array(
       [[ 2, -1, -1,  0,  0,  0],
        [-1,  3,  0, -1,  0, -1],
        [-1,  0,  2, -1,  0,  0],
        [ 0, -1, -1,  3, -1,  0],
        [ 0,  0,  0, -1,  2, -1],
        [ 0, -1,  0,  0, -1,  2]])

w, v = LA.eigh(lapl)

print ('Eigenvalues:', np.round(w,0))
print ('Eigenvectors:', np.round(v,2))

结果如下:

Eigenvalues: [ 0.  1.  2.  3.  3.  5.]
Eigenvectors: [[ 0.41  0.5   0.41 -0.46  0.34  0.29]
               [ 0.41  0.    0.41  0.53  0.23 -0.58]
               [ 0.41  0.5  -0.41 -0.07 -0.57 -0.29]
               [ 0.41  0.   -0.41  0.53  0.23  0.58]
               [ 0.41 -0.5  -0.41 -0.46  0.34 -0.29]
               [ 0.41 -0.5   0.41 -0.07 -0.57  0.29]]

但是,当我在 Wolfram Alpha 中运行相同的矩阵时,我得到了不同的结果 - 特征值相同,但特征向量不同:

v1 = ( 1, -2, -1,  2, -1,  1)
v2 = ( 0, -1,  1, -1,  0,  1)
v3 = ( 1, -1,  0, -1,  1,  0)
v4 = ( 1,  1, -1, -1, -1,  1)
v5 = (-1,  0, -1,  0,  1,  1)
v6 = ( 1,  1,  1,  1,  1,  1)

这里是 Wolfram Alpha 计算的链接:http://bit.ly/1wC9EHJ

为什么我得到不同的结果?我应该在 Python 中做什么才能获得与 Alpha 产生的结果相同的结果?

非常感谢您的帮助!

【问题讨论】:

    标签: python numpy eigenvector


    【解决方案1】:

    由于多种原因导致结果不同:

      1234563 >行。
    1. 特征向量的比例(或长度)未定义。所以它通常被缩放到长度 1。Wolfram 结果的缩放不同,我猜这会引起一些混乱。

    2. 请注意,通过缩放矢量,即使是 符号 也可以改变。这就是为什么正面和负面元素可能会颠倒的原因。

    3. 最后但同样重要的是:特征向量的顺序是未定义的,只要它们的顺序与其对应的特征值相同。因此,您还需要查看 Wolfram 的特征值,并可能相应地将 v1 重新排序为 v6。 (按特征值大小排序是一种常见的约定。Wolfram 似乎按降序排序,而 numpy 按升序排序。)

    4. 对于具有非唯一特征值的矩阵,对应的特征向量可以任意旋转,只要它们跨越对应的子空间。但是,您的示例中似乎并非如此。

    考虑到前 4 个问题,结果实际上非常接近。奇点无关紧要,因为只有一个零特征值,因此相应的特征向量是唯一的(直到符号和长度)。

    【讨论】:

    • 谢谢。可能缩放是这里的问题。我想知道 Numpy 中是否有任何简单的方法来缩放向量,使它们看起来与 Alpha 输出的相似。
    • @AlekseyLinetskiy:我没有看到 Wolfram 的缩放模式。可能选择避免使用分数 - 如果可能的话。但是如果你强迫它,例如通过将“2”替换为“2.01”,数字会接近您的。
    • 我不认为你可以通过缩放来改变符号,特征向量表示一个特定的方向,这就是为什么我们可以缩放它,因为方向不会改变。但是一旦你改变符号,方向就会翻转,这违背了获得特征向量的目的。
    猜你喜欢
    • 2015-12-31
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-30
    • 2016-09-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多