#python #numpy #eigenvalue #eigenvector
Вопрос:
При запуске np.linalg.eig([[0, 1], [1, 0]])
я получаю следующий вывод:
(array([ 1., -1.]),
array([[ 0.70710678, -0.70710678],
[ 0.70710678, 0.70710678]]))
Это правильно, однако порядок собственных значений не соответствует порядку собственных векторов. То есть собственное значение индекса 0
соответствует собственному вектору индекса 1
и наоборот.
Есть ли какой-нибудь простой способ исправить это? Я мог бы использовать собственные векторы для прямого вычисления соответствующих собственных значений, но это было бы неэффективно.
Комментарии:
1. В документации говорится, что собственные векторы-это столбцы, а не строки, что, я признаю, довольно удивительно.
The normalized (unit “length”) eigenvectors, such that the column v[:,i] is the eigenvector corresponding to the eigenvalue w[i].
2. @KyleParsons о, я понимаю, в этом есть смысл. Какой-то странный формат вывода, в любом случае спасибо!
Ответ №1:
Благодаря комментарию @KyleParsons я понял, в чем проблема. Собственные векторы представлены столбцами, а не строками. Таким образом, чтобы получить желаемый результат, я могу просто сделать:
A = # whatever matrix
vals, vecs = np.linalg.eig(A)
vecs = vecs.tranpose()