Pythonで線形代数を学ぼう!NumPyを使った基本演算から応用まで

 

線形代数はデータサイエンスや機械学習の基礎として重要な数学分野です。Pythonでは主にNumPyライブラリを使って線形代数の計算を効率的に行うことができます。この記事では、Pythonを使った線形代数の基本から応用までを実例とともに解説します。

NumPyのインストールと基本設定

import numpy as np

NumPyをインストールしていない場合は、以下のコマンドでインストールできます:

pip install numpy

ベクトルの作成と基本演算

ベクトルの作成

# 1次元配列(ベクトル)の作成
v1 = np.array([1, 2, 3])
v2 = np.array([4, 5, 6])
print(f"v1: {v1}")
print(f"v2: {v2}")

ベクトルの演算

# ベクトルの加算
addition = v1 + v2
print(f"v1 + v2: {addition}")

# ベクトルの減算
subtraction = v1 - v2
print(f"v1 - v2: {subtraction}")

# スカラー倍
scalar_mult = 3 * v1
print(f"3 * v1: {scalar_mult}")

内積と外積の計算

内積(ドット積)

# 内積の計算
dot_product = np.dot(v1, v2)
print(f"内積: {dot_product}")

# または
dot_product2 = v1.dot(v2)
print(f"内積(別の書き方): {dot_product2}")

外積(クロス積)

# 3次元ベクトルの外積
v3 = np.array([1, 0, 0])
v4 = np.array([0, 1, 0])
cross_product = np.cross(v3, v4)
print(f"外積: {cross_product}")

ベクトルのノルム(長さ)

# L2ノルム(ユークリッドノルム)
norm_l2 = np.linalg.norm(v1)
print(f"L2ノルム: {norm_l2}")

# L1ノルム(マンハッタンノルム)
norm_l1 = np.linalg.norm(v1, ord=1)
print(f"L1ノルム: {norm_l1}")

線形結合と線形独立

線形結合

# ベクトルの線形結合
a, b = 2, 3
linear_combination = a * v1 + b * v2
print(f"線形結合 2*v1 + 3*v2: {linear_combination}")

線形独立性の判定

# 行列の階数を使った線形独立性の判定
matrix = np.array([v1, v2, [2, 4, 6]])  # v1, v2, 2*v1を並べた行列
rank = np.linalg.matrix_rank(matrix)
print(f"行列の階数: {rank}")
print(f"線形独立: {rank == matrix.shape[0]}")

ベクトル空間の基底

# 3次元空間の標準基底
e1 = np.array([1, 0, 0])
e2 = np.array([0, 1, 0])
e3 = np.array([0, 0, 1])

# 任意のベクトルを基底で表現
vector = np.array([3, 2, 5])
coeffs = vector  # 標準基底の場合、係数はそのまま
print(f"ベクトル {vector} = {coeffs[0]}*e1 + {coeffs[1]}*e2 + {coeffs[2]}*e3")

実用的な応用例

ベクトルの射影

def vector_projection(u, v):
    """ベクトルuをベクトルvに射影"""
    return (np.dot(u, v) / np.dot(v, v)) * v

u = np.array([3, 4])
v = np.array([1, 0])
projection = vector_projection(u, v)
print(f"射影: {projection}")

角度の計算

def angle_between_vectors(v1, v2):
    """2つのベクトル間の角度を計算(ラジアン)"""
    cos_angle = np.dot(v1, v2) / (np.linalg.norm(v1) * np.linalg.norm(v2))
    return np.arccos(np.clip(cos_angle, -1.0, 1.0))

angle = angle_between_vectors(v1, v2)
angle_degrees = np.degrees(angle)
print(f"角度: {angle_degrees:.2f}度")

まとめ

Pythonの線形代数は、NumPyライブラリを使うことで効率的に計算できます。ベクトルの基本演算から内積、外積、ノルム計算まで、様々な操作が簡潔なコードで実現できます。これらの基礎知識は、機械学習やデータ分析において重要な土台となります。

次のステップとして、行列演算や固有値分解などのより高度なトピックにも挑戦してみてください。

■プロンプトだけでオリジナルアプリを開発・公開してみた!!

■AI時代の第一歩!「AI駆動開発コース」はじめました!

テックジム東京本校で先行開始。

■テックジム東京本校

「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。

<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。

<月1開催>放送作家による映像ディレクター養成講座

<オンライン無料>ゼロから始めるPython爆速講座