Python の数値計算ライブラリで固有ベクトルを求める
そうだ! 固有ベクトルを求めよう!
SymPy で求めよう.
import sympy matrix = sympy.Matrix([[1,1,2],[0,2,-1],[0,0,3]]) matrix matrix.eigenvals() matrix.eigenvects()
出力
Matrix([ [1, 1, 2], [0, 2, -1], [0, 0, 3]]) {1: 1, 2: 1, 3: 1} [(1, 1, [Matrix([ [1], [0], [0]])]), (2, 1, [Matrix([ [1], [1], [0]])]), (3, 1, [Matrix([ [1/2], [ -1], [ 1]])])]
NumPy で求めよう.
import numpy matrix = numpy.array([[1,1,2],[0,2,-1],[0,0,3]]) matrix (vals,vects) = numpy.linalg.eig(matrix) (vals,vects)
出力
array([[ 1, 1, 2], [ 0, 2, -1], [ 0, 0, 3]]) (array([ 1., 2., 3.]), array([[ 1. , 0.70710678, 0.33333333], [ 0. , 0.70710678, -0.66666667], [ 0. , 0. , 0.66666667]]))
SciPy で求めよう.
import scipy from scipy import linalg matrix = scipy.mat([[1,1,2],[0,2,-1],[0,0,3]]) matrix linalg.eig(matrix)
出力
matrix([[ 1, 1, 2], [ 0, 2, -1], [ 0, 0, 3]]) (array([ 1.+0.j, 2.+0.j, 3.+0.j]), array([[ 1. , 0.70710678, 0.33333333], [ 0. , 0.70710678, -0.66666667], [ 0. , 0. , 0.66666667]]))
SymPy では固有値が何重の解になっているか,も一緒に出してくれた.
NumPy では固有ベクトルを正規化して出してくれた.
SciPy では複素数の範囲で固有値を探してくれ,固有ベクトルを正規化して出してくれた.
あと,NumPy と SciPy はインデントつけて出してくれたので見やすい.