Возвращайте упорядоченные собственные значения и собственные векторы с помощью `numpy.linalg.eig`

#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()