クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

行列の掛け算のしかた

このレッスンのあとで: 行列にベクトルを掛け、行列に別の行列を掛けることができる。

55分のレッスンコマンド3件JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

行列は数の表である

行列とは、数を縦と横に並べた表です。行列にベクトルや別の行列を掛けると、たくさんの足し算と掛け算を、1回の計算にまとめられます。

コンビニの2日分の売れた数と、品物の値段があります。売上の合計は、行列の掛け算で、2日分が同時に出ます。

このレッスンのゴール

メモ

行列にベクトルを掛け、行列に別の行列を掛けることができる。

キーワード

ことばいみ
行列数を縦と横に並べた表
行行列の横の並び
列行列の縦の並び
形行の数と列の数。2行3列を 2×3 と書く
積掛け算の結果。行列どうしの積は、行と列で作る

学生が入力するセルは、このプレビューでは空白です。

行列とベクトルの積は行ごとのドット積

行列の行を1本ずつ取り出し、ベクトルとのドット積を求めます。その結果を、行の順に並べたものが、行列とベクトルの積です。

行列が2行なら、結果の成分は2つです。行の長さは、ベクトルの成分の数と同じでなければなりません。

例: 2日分の売上

日売れた数(おにぎり、お茶、パン)計算売上
月曜[10, 5, 2]10 × 150 + 5 × 140 + 2 × 2002600 円
火曜[8, 6, 4]8 × 150 + 6 × 140 + 4 × 2002840 円

学生が入力するセルは、このプレビューでは空白です。

行とベクトルのドット積

コード: python
# 月曜の売れた数と、1つめの店の値段です。
monday = [10, 5, 2]
shop_one = [150, 140, 200]

# 行の成分と列の成分を、同じ位置どうしで掛けて足します。
sales = 0
for i in range(3):
    sales = sales + monday[i] * shop_one[i]

print("月曜の売上:", sales, "円")
# monday の 2 を 0 に変えると、売上はいくら減りますか。

NumPy で行列とベクトルを掛ける

コマンド
docker exec jupyter python3 -c "import numpy as np; a = np.array([[10, 5, 2], [8, 6, 4]]); p = np.array([150, 140, 200]); print(a.shape, a @ p)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

行列どうしの積は列ごとに作る

2店の値段を、2つの列にして並べると、値段の行列が作れます。左の行列の行と、右の行列の列のドット積を、すべての組で求めます。

2×3 の行列と 3×2 の行列を掛けると、2×2 の行列になります。左の列の数と、右の行の数が合うことが条件です。

例: 2日と2店の売上

日店1(150、140、200)店2(160、130、210)
月曜 [10, 5, 2]26001600 + 650 + 420 = 2670
火曜 [8, 6, 4]28401280 + 780 + 840 = 2900

学生が入力するセルは、このプレビューでは空白です。

よくある間違い

注意

多くの人は、行列の積を、同じ位置どうしの掛け算だと考えます。行列の積は行と列のドット積で、順番も大切です。AB と BA は、ふつう違う行列になります。

掛ける順番を入れ替える

コード: python
# 2つの2行2列の行列です。掛ける順番を入れ替えます。
a = [[1, 2], [3, 4]]
b = [[0, 1], [1, 0]]

ab = [[0, 0], [0, 0]]
ba = [[0, 0], [0, 0]]
for r in range(2):
    for c in range(2):
        for k in range(2):
            ab[r][c] = ab[r][c] + a[r][k] * b[k][c]
            ba[r][c] = ba[r][c] + b[r][k] * a[k][c]

print("a と b の積:", ab)
print("b と a の積:", ba)
# a の 4 を 5 に変えて、2つの積が変わるところを確かめてください。

2日と2店の売上を一度に出す

コマンド
docker exec jupyter python3 -c "import numpy as np; a = np.array([[10, 5, 2], [8, 6, 4]]); p = np.array([[150, 160], [140, 130], [200, 210]]); print(a @ p)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

星と @ の違いを確かめる

コマンド
docker exec jupyter python3 -c "import numpy as np; a = np.array([[1, 2], [3, 4]]); b = np.array([[0, 1], [1, 0]]); print(a * b); print(a @ b)"

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

さらに挑戦: 単位行列

対角線が 1 で、ほかが 0 の正方形の行列を、単位行列といいます。2×2 では [[1, 0], [0, 1]] です。

どんな行列に掛けても、結果は元の行列のままです。[[1, 2], [3, 4]] に掛けて、確かめましょう。

このラボとソースについて: JupyterLab データサイエンスラボ:pandas、Matplotlib、scikit-learn をブラウザーで

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。