1. はじめに
Pythonには、線形代数の計算を効率的に行うための強力なライブラリがあります。その中でも numpy.linalg
は、ベクトルや行列の演算、行列式の計算、逆行列、固有値など、基本的かつ実用的な機能を提供してくれます。
本記事では、「Python|基本的な線形代数計算:numpy.linalg」というテーマで、numpy.linalg
モジュールを使った代表的な操作とその実行例を初心者にも分かりやすく解説します。数学が苦手な方でも安心して読めるよう、できるだけシンプルな例を使って丁寧に説明していきます。
データ分析や機械学習、物理シミュレーション、3Dグラフィックスなど、実務でも活用される場面が多いため、今のうちに基礎をしっかり押さえておきましょう。
2. numpy.linalgの基本:できることと使い方
numpy.linalgとは?
numpy.linalg
は、NumPyライブラリに含まれる線形代数専用のサブモジュールです。
主な用途は以下の通りです。
- ベクトルや行列のノルム(長さ)を計算
- 行列式を求める
- 行列の逆行列を求める
- 線形方程式の解を求める
- 固有値・固有ベクトルの計算
基本的な行列演算の例
まずはNumPyをインポートし、簡単な行列を定義してみましょう。
import numpy as np
# 2×2の行列を定義
A = np.array([[1, 2],
[3, 4]])
print("行列A:")
print(A)
実行結果:
行列A:
[[1 2]
[3 4]]
行列式を求める(np.linalg.det)
det_A = np.linalg.det(A)
print("行列Aの行列式:", det_A)
実行結果:
行列Aの行列式: -2.0000000000000004
結果が0に近い場合でも、浮動小数点誤差のため完全なゼロにならないことがあります。
逆行列を求める(np.linalg.inv)
inv_A = np.linalg.inv(A)
print("行列Aの逆行列:")
print(inv_A)
実行結果:
行列Aの逆行列:
[[-2. 1. ]
[ 1.5 -0.5]]
3. よくある使い方・応用例
線形方程式を解く(np.linalg.solve)
連立方程式を解くときにも numpy.linalg
が便利です。以下の連立方程式を解いてみましょう。
x + 2y = 5
3x + 4y = 6
# 係数行列と定数ベクトル
A = np.array([[1, 2],
[3, 4]])
b = np.array([5, 6])
# 解を求める
x = np.linalg.solve(A, b)
print("連立方程式の解:")
print(x)
実行結果:
連立方程式の解:
[-4. 4.5]
ノルム(ベクトルの長さ)を計算する
ベクトルの長さ(ノルム)を求めるには np.linalg.norm()
を使います。
v = np.array([3, 4])
length = np.linalg.norm(v)
print("ベクトルvのノルム:", length)
実行結果:
ベクトルvのノルム: 5.0
固有値と固有ベクトルを求める(np.linalg.eig)
データ解析や物理モデリングに欠かせない固有値・固有ベクトルの計算も可能です。
A = np.array([[2, 0],
[0, 3]])
eigvals, eigvecs = np.linalg.eig(A)
print("固有値:", eigvals)
print("固有ベクトル:")
print(eigvecs)
実行結果:
固有値: [2. 3.]
固有ベクトル:
[[1. 0.]
[0. 1.]]
4. 注意点・エラー対策
行列が正則でないと逆行列は求められない
行列の行列式が0に近い場合(特異行列)、逆行列は存在せず、np.linalg.inv()
を使うとエラーになります。
B = np.array([[1, 2],
[2, 4]])
# 行列式が0になる
print("行列Bの行列式:", np.linalg.det(B))
# 逆行列を求めるとエラー
inv_B = np.linalg.inv(B)
実行結果:
LinAlgError: Singular matrix
このような場合は、np.linalg.pinv()
を使って擬似逆行列を計算する方法もあります。
浮動小数点誤差に注意
行列式や計算結果が理論上は「0」でも、浮動小数点の誤差により 1e-15 や -0.0 などになることがあります。
np.isclose()
や np.round()
を使って比較しましょう。
5. まとめ
本記事では、Pythonのnumpy.linalgモジュールを使った基本的な線形代数計算について紹介しました。
- 行列式、逆行列、連立方程式の解法
- ベクトルのノルムや固有値計算
- エラー回避や注意点
数式アレルギーがある人も、numpy.linalg
を使えば数行のコードで複雑な線形代数処理が可能です。データ分析・AI開発・シミュレーションなど、今後さらに活用の場が広がる知識なので、少しずつ慣れていきましょう。
学習のコツとしては、「小さな例を動かして、出力結果を確認しながら覚える」のが最短ルートです。