【Python】NumPyで線形代数の基本計算を行う(逆行列・行列式・ランク)

NumPyの numpy.linalg モジュールを使用すると、逆行列や行列式といった線形代数(Linear Algebra)の重要な指標を簡単に算出できます。

ここでは、転置やトレースといった基本操作と合わせて、主要な線形代数関数の使い方を解説します。

目次

主な線形代数関数一覧

numpy.linalg モジュールに含まれる代表的な関数とその戻り値です。

関数戻り値の内容
np.linalg.inv(M)逆行列
元の行列と掛けると単位行列になる行列。正則行列でない(行列式が0)場合はエラーになります。
np.linalg.det(M)行列式
行列の「体積拡大率」を表す数値。これが0の場合、逆行列を持ちません。
np.linalg.matrix_rank(M)ランク(階数)
行列の中で、互いに独立な行(または列)の数。

実行可能なサンプルコード

以下のコードは、2行2列の正方行列 [[1, 2], [3, 4]] を定義し、各種計算を行う例です。

逆行列や行列式の計算結果を確認しやすい値に設定しています。

import numpy as np

def linear_algebra_demo():
    # 1. 行列の定義
    # ここでは例として [[1, 2], [3, 4]] を使用します
    target_matrix = np.array([
        [1, 2],
        [3, 4]
    ])

    print("--- 元の行列 ---")
    print(target_matrix)

    # 2. 転置行列 (Transpose)
    # 行と列を入れ替えます。.T 属性を使います
    print("\n--- 転置行列 (.T) ---")
    print(target_matrix.T)

    # 3. トレース (Trace)
    # 対角成分の和 (1 + 4 = 5)
    print("\n--- トレース (.trace()) ---")
    print(target_matrix.trace())

    # 4. 逆行列 (Inverse Matrix)
    # np.linalg.inv() を使用
    print("\n--- 逆行列 (np.linalg.inv) ---")
    try:
        inv_matrix = np.linalg.inv(target_matrix)
        print(inv_matrix)
    except np.linalg.LinAlgError:
        print("逆行列を計算できません(特異行列です)。")

    # 5. 行列式 (Determinant)
    # np.linalg.det() を使用
    # 計算式: (1 * 4) - (2 * 3) = 4 - 6 = -2
    print("\n--- 行列式 (np.linalg.det) ---")
    det_val = np.linalg.det(target_matrix)
    print(f"{det_val:.2f}")

    # 6. ランク (Rank)
    # np.linalg.matrix_rank() を使用
    # 行同士が独立しているのでランクは 2 になります
    print("\n--- ランク (np.linalg.matrix_rank) ---")
    rank_val = np.linalg.matrix_rank(target_matrix)
    print(rank_val)

if __name__ == "__main__":
    linear_algebra_demo()

解説:メソッドと関数の使い分け

  • 配列の属性/メソッドとして使うもの
    • 転置: 変数名.T
    • トレース(対角和): 変数名.trace()
    • これらは計算コストが低く、配列オブジェクト自体が機能を持っています。
  • np.linalg モジュールを使うもの
    • 逆行列: np.linalg.inv(変数名)
    • 行列式: np.linalg.det(変数名)
    • ランク: np.linalg.matrix_rank(変数名)
    • これらは複雑な計算処理が必要なため、専用の linalg (Linear Algebra) モジュール内の関数として提供されています。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次