0Pricing
Learn AI with Python · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

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

  1. 配列の作成とプロパティ
  2. インデックス参照、スライス、ファンシーインデックス
  3. ブロードキャストとベクトル化演算
  4. NumPy による線形代数
← Learn AI with Pythonに戻る