Return 使用 `numpy.linalg.eig` 排序的特征值和特征向量
Return ordered eigenvalues and eigenvectors with `numpy.linalg.eig`
当 运行 np.linalg.eig([[0, 1], [1, 0]])
我得到以下输出:
(array([ 1., -1.]),
array([[ 0.70710678, -0.70710678],
[ 0.70710678, 0.70710678]]))
这是正确的,但是,特征值的顺序与特征向量的顺序不对应。也就是说,索引0
处的特征值对应索引1
处的特征向量,反之亦然。
有什么简单的方法可以解决这个问题吗?我可以使用特征向量直接计算它们对应的特征值,但效率不高。
感谢@KyleParsons 的评论,我明白了问题所在。特征向量由列表示,而不是行。因此,为了得到我想要的输出,我可以简单地做:
A = # whatever matrix
vals, vecs = np.linalg.eig(A)
vecs = vecs.tranpose()
当 运行 np.linalg.eig([[0, 1], [1, 0]])
我得到以下输出:
(array([ 1., -1.]),
array([[ 0.70710678, -0.70710678],
[ 0.70710678, 0.70710678]]))
这是正确的,但是,特征值的顺序与特征向量的顺序不对应。也就是说,索引0
处的特征值对应索引1
处的特征向量,反之亦然。
有什么简单的方法可以解决这个问题吗?我可以使用特征向量直接计算它们对应的特征值,但效率不高。
感谢@KyleParsons 的评论,我明白了问题所在。特征向量由列表示,而不是行。因此,为了得到我想要的输出,我可以简单地做:
A = # whatever matrix
vals, vecs = np.linalg.eig(A)
vecs = vecs.tranpose()