固有値と固有ベクトル

本稿では SciPy を用いて正方行列の固有値や固有ベクトルを求める方法について記す。これも NumPy だけでなんとかなりそうな問題だが、やってみよう。

関数 scipy.linalg.eig

関数 scipy.linalg.eig を呼び出すことで、与えられた正方行列 A の固有値と固有ベクトルを同時に計算することができる。

  • デフォルトでは右側の固有ベクトルが計算されるが、キーワード引数で左側を算出させるように指定することが可能。

  • 固有ベクトルは長さが正規化されて求まる。

コード例を示す。

#!/usr/bin/env python
"""eigen.py: Demonstrate computing eigenvalues and eigenvectors for a regular
matrix.
"""
import numpy as np
from scipy import linalg

# pylint: disable=invalid-name

# Let A be a 3x3 regular matrix.
A = np.array([[2, -1, -1],
              [-1, 1, 0],
              [-1, 0, 1]])

# Compute the eigenvalues and eigenvectors of A.
eigval, eigvec = linalg.eig(A)

print("eigenvalues: ")
for val in eigval:
    print(val)

print("eigenvectors: ")
for i in range(A.shape[0]):
    print(eigvec[:, i])

私の環境での実行結果は次のとおり:

eigenvalues:
(3+0j)
(-2.91433543964e-16+0j)
(1+0j)
eigenvectors:
[-0.81649658  0.40824829  0.40824829]
[ 0.57735027  0.57735027  0.57735027]
[  1.57009246e-16  -7.07106781e-01   7.07106781e-01]