NumPy linalg.eigh返回不正确的特征向量

时间:2018-06-02 07:09:08

标签: python numpy matrix linear-algebra eigenvalue

我正在使用NumPy的线性代数包来计算对应于大Hermitian矩阵的最小特征值的特征向量。 linalg.eigh函数声称以升序返回Hermitian矩阵的特征值,以及相应的特征向量。这正是我所需要的。然而,即使在已经对角矩阵的简单情况下,似乎该功能也失败了。例如:

import numpy as np

H = np.diag([-0.4,-0.5, 0.4, 2.3, -0.5, -0.6, 0.3, 2.2, 0.4, 0.3, 1.2, 3.1, 2.3, 2.2, 3.1, 5.])
np.linalg.eigh(H)

输出

(array([-0.6, -0.5, -0.5, -0.4,  0.3,  0.3,  0.4,  0.4,  1.2,  2.2,  2.2, 2.3,  2.3,  3.1,  3.1,  5. ]),
array([[ 0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.],
       [ 0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.,  0.],
       [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  1.]]))

即。函数输出[0,0,0,1,...]作为对应于-0.6的特征向量,这显然是不真实的。谁能告诉我为什么这个功能失败了?

1 个答案:

答案 0 :(得分:3)

请参阅NumPy文档:https://docs.scipy.org/doc/numpy-1.14.0/reference/generated/numpy.linalg.eigh.html

特征向量作为输出数组的列而不是行返回。你会看到v [:,0]是对应于-0.6的特征向量。如果转置结果,则可以将特征向量转换为行格式。