SciPyを使ってPythonで行列の固有値・固有ベクトルを計算する方法
固有ベクトルと固有値は、さまざまな場面で活用されている重要な概念です。「Eigen(アイゲン)」という言葉はドイツ語で「固有の」「典型的な」を意味し、固有ベクトルは「特性ベクトル」と呼ばれることもあります。たとえば、データセットに何らかの変換を加えたいものの、「データの方向は変えたくない」という条件がある場合、固有ベクトルと固有値が役立ちます。
正方行列(行数と列数が等しい行列)に対して、固有値と固有ベクトルは次の式を満たします。

固有ベクトルは、まず固有値を求めた後に計算されるのが一般的です。
注意 − 固有値は、3次元以上の高次元でも問題なく機能します。
こうした数学的計算を手作業で行うのは大変ですが、SciPyライブラリには「eig」という関数が用意されており、これを使うことで固有値と固有ベクトルを簡単に求められます。
eig関数の構文
scipy.linalg.eig(matrix)
それでは、eig関数の実際の使い方を見ていきましょう。
サンプルコード
from scipy import linalg
import numpy as np
my_arr = np.array([[5,7],[11,3]])
eg_val, eg_vect = linalg.eig(my_arr)
print("固有値:")
print(eg_val)
print("固有ベクトル:")
print(eg_vect)
実行結果
固有値: [12.83176087+0.j -4.83176087+0.j] 固有ベクトル: [[ 0.66640536 -0.57999285] [ 0.74558963 0.81462157]]
コードの解説
- 必要なライブラリ(SciPyのlinalgモジュールとNumPy)をインポートします。
- NumPyのarray関数を使って、具体的な数値を持つ2×2の正方行列を定義します。
- この行列を引数としてeig関数に渡すと、行列の固有値と固有ベクトルが自動的に計算されます。
- 計算結果は、固有値と固有ベクトルそれぞれ別の変数(eg_val、eg_vect)に格納されます。
- 最後に、print文によって結果がコンソールに出力されます。
このように、SciPyのeig関数を利用すれば、複雑な線形代数の計算もわずか数行のコードで実現できます。主成分分析(PCA)など、データ分析や機械学習の分野でも固有値・固有ベクトルは頻繁に使われるため、ぜひ覚えておきましょう。
-
Pythonで変数の1つが離散値の場合、lmplot関数を使ってデータに回帰直線を当てはめるには?
回帰モデルを構築する際には、多重共線性(マルチコリニアリティ)の有無を必ず確認します。これは、連続変数のすべての組み合わせの間にどのような相関関係が存在するのかを把握する必要があるためです。もし変数間に多重共線性が見つかった場合は、その影響を取り除いてからモデルを構築しなければなりません。こうした分析の場面で役立つのが、seabornライブラリの「regplot」関数と「lmplot」関数です。これらの関数を利用することで、線形回帰における変数間の線形関係を視覚的に把握できます。regplotとlmplotの違い「regplot」関数は、x軸・y軸に渡す値の形式が非常に柔軟です。NumPy配列
-
SciPyを使ってPythonで行列の行列式を計算する方法
行列式(determinant)は、行列や多次元配列に対して計算できる重要なスカラー値です。行列や配列の性質をより深く理解したい場合、この行列式の計算が必要になることがあります。 SciPyの「det」関数について SciPyには、「linalg」モジュール(線形代数:Linear Algebraの略称)の中に「det」という関数が用意されており、これを使うことで行列式を簡単に求めることができます。 det関数の構文 scipy.linalg.det(matrix) 引数「matrix」には、行列式を求めたい行列または配列を渡します。この関数は、行列や配列を引数として渡すだけで呼び出すことがで