NumPy による線形代数
連立方程式に対する np.dot、np.linalg.inv、np.linalg.eig、np.linalg.solve を扱います。
「NumPy による線形代数」はCoddyKit上の無料Learn AI with Pythonレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn AI with Python学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn AI with Pythonコースには全4レッスンが含まれています。
NumPyでの線形代数
NumPyは@演算子とnp.linalgモジュールを通じて行列演算を提供します。これは、ほぼすべての機械学習アルゴリズムの基盤です。
@による行列積
@演算子は通常の行列積を計算します。内側の次元は一致している必要があり、(m,k) @ (k,n)の結果は(m,n)になります。
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(A * B) # element-wise: [[ 5 12]
# [21 32]]
print(A @ B) # matrix product (different result)np.dot
np.dotは関数形式です。2次元配列では@と同じ働きをし、1次元配列ではドット積(スカラー)を計算します。
u = np.array([1, 2, 3])
v = np.array([4, 5, 6])
print(np.dot(u, v)) # 1*4 + 2*5 + 3*6 = 32逆行列
np.linalg.inv(A)は逆行列を返します。逆行列とは、Aと掛け合わせると単位行列になる行列です。逆行列を持つのは、正方かつ非特異な行列だけです。
A = np.array([[4.0, 7.0], [2.0, 6.0]])
Ainv = np.linalg.inv(A)
print(np.round(A @ Ainv, 6)) # identity行列式
np.linalg.det(A)は行列式を返します。行列式が0の場合、その行列は特異行列であり、逆行列を求められません。
print(np.linalg.det(A)) # 10.0 (nonzero -> invertible)連立一次方程式を解く
A x = bを解くには、逆行列を計算するよりもnp.linalg.solve(A, b)を使うのが適切です。こちらのほうが高速で、数値的にも安定しています。
A = np.array([[3.0, 1.0], [1.0, 2.0]])
b = np.array([9.0, 8.0])
x = np.linalg.solve(A, b)
print(x) # [2. 3.]invよりsolveを使う理由
inv(A) @ bを計算すると、不要な処理が増え、丸め誤差も増幅されます。solveはLU分解を直接使います。実際のコードではsolveを使いましょう。
# Avoid: x = np.linalg.inv(A) @ b
# Prefer: x = np.linalg.solve(A, b)固有値と固有ベクトル
np.linalg.eig(A)は固有値と固有ベクトルを返します。これらはPCAや安定性解析などの基盤となります。
A = np.array([[2.0, 0.0], [0.0, 3.0]])
vals, vecs = np.linalg.eig(A)
print(vals) # [2. 3.]ベクトルと行列のノルム
np.linalg.normは大きさを測定します。デフォルトでは、ベクトルに対するユークリッドノルム(L2ノルム)であり、距離から正則化まで幅広く使われます。
v = np.array([3.0, 4.0])
print(np.linalg.norm(v)) # 5.0 (sqrt(9+16))
print(np.linalg.norm(v, 1)) # 7.0 (L1 norm)転置
A.Tは行列を転置し、行と列を入れ替えます。正規方程式のような数式で頻繁に登場します。
A = np.array([[1, 2, 3], [4, 5, 6]])
print(A.T)
# [[1 4]
# [2 5]
# [3 6]]確認問題
線形代数の知識を確認しましょう。
まとめ
線形代数ツールキット:
- 行列積とドット積には
@/np.dotを使う(*ではない) np.linalg.inv、np.linalg.det- 逆行列を計算するより
np.linalg.solve(A, b)を使う - 固有値分解には
np.linalg.eigを使う - 大きさの計算には
np.linalg.norm、転置にはA.Tを使う
よくある質問
「NumPy による線形代数」レッスンは無料ですか?
はい。「NumPy による線形代数」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn AI with Pythonコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn AI with Pythonコースには全4レッスンが含まれています。
「NumPy による線形代数」で何を学びますか?
連立方程式に対する np.dot、np.linalg.inv、np.linalg.eig、np.linalg.solve を扱います。 ブラウザで直接実行するハンズオンコードでLearn AI with Pythonを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn AI with Pythonを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn AI with Pythonは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「NumPy による線形代数」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn AI with Pythonレッスンでコードを書いて実行できますか?
はい。すべてのLearn AI with Pythonレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 配列の作成とプロパティ
- インデックス参照、スライス、ファンシーインデックス
- ブロードキャストとベクトル化演算
- NumPy による線形代数