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

NumPy linalg.eigh is returning incorrect eigenvectors

我正在使用 NumPy 的线性代数包来计算与大型 Hermitian 矩阵的最小特征值对应的特征向量。 linalg.eigh 函数要求 return 厄尔米特矩阵的特征值按升序排列,以及相应的特征向量。这正是我所需要的。但是,即使在已经对角矩阵的简单情况下,此功能似乎也失败了。例如:

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 的特征向量,这显然是不正确的。谁能告诉我为什么这个功能失败了?

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

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