Numpyの固有値と固有ベクトル

勘違いしがちなのでメモ

Numpyで固有値固有ベクトルを求める。

In [2]: import numpy as np
In [4]: A = np.array([[2,3],[1,4]])
In [6]: la, v = np.linalg.eig(A)
In [8]: la, v
Out[8]:
(array([ 1.,  5.]),
 array([[-0.9486833 , -0.70710678],
       [ 0.31622777, -0.70710678]]))

このとき、固有値1に対応するのは、はじめの列ベクトル[-0.9486833, 0.31622777] である。

In [9]: la[0]
Out[9]: 0.99999999999999956
In [10]: v[:,0]
Out[10]: array([-0.9486833 ,  0.31622777])

ちなみに、最大固有値とそれに対応する固有ベクトルが欲しいとき、
このように取得したけどもっと良いやり方あるかしらん

# 最大固有値のindex
In [19]: index = np.where(la==max(la))[0][0]
In [20]: v[:, index]
Out[20]: array([-0.70710678, -0.70710678])