0Pricing
Python Academy · レッスン

NumPy による線形代数

行列積、分解、連立一次方程式の求解を行います。

「NumPy による線形代数」はCoddyKit上の無料Python Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPython Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Python Academyコースには全4レッスンが含まれています。

np.dotと@

行列の乗算には、np.dot(A, B)または@演算子(Python 3.5以降)を使います。

import numpy as np

A = np.array([[1,2],[3,4]])
B = np.array([[5,6],[7,8]])

print(A @ B)
# [[19 22]
#  [43 50]]
print(np.dot(A, B))   # same result

要素単位の乗算と行列の乗算

*は要素単位の乗算(Hadamard積)です。@は行列の乗算です。両者を混同しないでください。

import numpy as np

A = np.array([[1,2],[3,4]])
B = np.array([[2,0],[1,3]])

print(A * B)    # [[ 2  0] [ 3 12]] — element-wise
print(A @ B)    # [[ 4  6] [10 12]] — matrix multiply

転置

arr.Tは配列を転置します(行と列を入れ替えます)。高次元配列ではnp.transpose(arr, axes)を使います。

import numpy as np

A = np.array([[1,2,3],[4,5,6]])
print(A.shape)    # (2, 3)
print(A.T.shape)  # (3, 2)
print(A.T)

np.linalg.invとnp.linalg.det

行列の逆行列と行列式を計算します。

import numpy as np

A = np.array([[2.,1.],[1.,3.]])
print(np.linalg.inv(A))
# [[ 0.6 -0.2]
#  [-0.2  0.4]]
print(np.linalg.det(A))   # 5.0

連立一次方程式の解法

np.linalg.solve(A, b)は、LU分解を使ってAx = bを効率的に解きます。

import numpy as np

# Solve: 2x + y = 5; x + 3y = 10
A = np.array([[2.,1.],[1.,3.]])
b = np.array([5.,10.])
x = np.linalg.solve(A, b)
print(x)   # [1.  3.]   → x=1, y=3

固有値と固有ベクトル

np.linalg.eig(A)は固有値と固有ベクトルを返します。対称行列には、より高速で安定したnp.linalg.eighを使います。

import numpy as np

A = np.array([[4., 2.], [1., 3.]])
vals, vecs = np.linalg.eig(A)
print("Eigenvalues:", vals)    # [5.  2.]
print("Eigenvectors:\n", vecs)

SVD:特異値分解

np.linalg.svd(A)はAをU、Sigma、Vtに分解します。次元削減(PCA)や疑似逆行列に使われます。

import numpy as np

A = np.array([[1,2],[3,4],[5,6]], dtype=float)
U, s, Vt = np.linalg.svd(A, full_matrices=False)
print("Singular values:", s)
# Reconstruct: U @ np.diag(s) @ Vt ≈ A

np.linalg.norm

ベクトルと行列のノルムを計算します。

import numpy as np

v = np.array([3., 4.])
print(np.linalg.norm(v))           # 5.0  (Euclidean)
print(np.linalg.norm(v, ord=1))    # 7.0  (Manhattan)

A = np.eye(3)
print(np.linalg.norm(A, "fro"))    # 1.732 (Frobenius)

外積と外積行列

3次元のベクトル積にはnp.cross(a, b)を使います。外積行列にはnp.outer(a, b)を使います。

import numpy as np

a = np.array([1,0,0])
b = np.array([0,1,0])
print(np.cross(a, b))   # [0 0 1]

print(np.outer([1,2,3], [4,5]))
# [[ 4  5]
#  [ 8 10]
#  [12 15]]

np.linalg.lstsq

過剰決定系(未知数より方程式の数が多い連立方程式)に対する最小二乗解を求めます。

import numpy as np

# Fit y = ax + b  to noisy data
X = np.column_stack([np.arange(5), np.ones(5)])
y = np.array([1.1, 2.0, 3.1, 3.9, 5.2])

coeffs, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
print(f"slope={coeffs[0]:.2f}, intercept={coeffs[1]:.2f}")

np.einsum

np.einsumは、アインシュタインの縮約記法を使って任意のテンソル縮約を表現します。複雑な線形代数にも非常に柔軟に対応できます。

import numpy as np

A = np.random.rand(3, 4)
B = np.random.rand(4, 5)

# Matrix multiplication via einsum:
C = np.einsum("ij,jk->ik", A, B)
print(C.shape)   # (3, 5)

# Trace:
M = np.eye(4)
print(np.einsum("ii->", M))   # 4.0

確認問題

NumPy(Python 3.5以降)で行列の乗算を行う演算子は何ですか。

まとめ

行列の乗算には@を、連立一次方程式にはnp.linalg.solveを、固有値にはnp.linalg.eigを、分解にはnp.linalg.svdを使います。np.einsumは任意のテンソル縮約を処理します。

よくある質問

「NumPy による線形代数」レッスンは無料ですか?

はい。「NumPy による線形代数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Python Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Python Academyコースには全4レッスンが含まれています。

「NumPy による線形代数」で何を学びますか?

行列積、分解、連立一次方程式の求解を行います。 ブラウザで直接実行するハンズオンコードでPython Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Python Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのPython Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「NumPy による線形代数」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このPython Academyレッスンでコードを書いて実行できますか?

はい。すべてのPython Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. NumPy 配列と dtype
  2. 配列演算とブロードキャスト
  3. インデックス指定、スライス、高度なインデックス指定
  4. NumPy による線形代数
← Python Academyに戻る