演算の種類と行列のサイズ(行数・列数)を選び、グリッドに成分を入力してください。転置 Aᵀ とべき乗 Aⁿ は行列Aだけを使います。
このページでできること
- 2×2〜4×4(2×3のような長方形もOK)の行列同士の足し算 \(A+B\)・引き算 \(A-B\)・掛け算 \(AB\) がその場で計算できます
- 行と列を入れ替える転置 \(A^{T}\) と、正方行列のべき乗 \(A^{n}\)(\(n\) は1〜10)も計算できます
- 掛け算の「行×列の内積」など、計算のしかたを実際の数値の途中式で確認できます
- 式のやさしい解説・Excel/Googleスプレッドシート(MMULT・TRANSPOSE)/Python用のコピペ数式・計算ドリル(演習問題)もこのページにまとまっています
この計算は何の役に立つ?
3DCGでは、キャラクターの回転・拡大縮小などの変形を「座標に行列を掛ける」ことで計算します。複数の変形も、行列同士を先に掛け合わせれば1つの行列にまとめられます。
ゲーム機やパソコンのGPU(グラフィック用の処理装置)は、この行列の掛け算を大量にこなすための専用計算機といえます。
デジタル画像は「画素(ピクセル)の明るさを縦横に並べた行列」そのものです。写真アプリのぼかしやシャープなどのフィルタ処理は、この行列への演算として計算されています。
「画像=行列」という見方は、画像認識などのAI技術の出発点にもなっています。
未知数がたくさんある連立方程式は、係数を行列に並べると \(A\boldsymbol{x} = \boldsymbol{b}\) という1本の式にまとめられます。
建物の強度計算や電気回路の解析では、何千・何万本もの式をこの形にして、コンピュータの行列計算で一気に解いています。
駅と駅、人と人のつながりを「つながっていれば1、いなければ0」の行列(隣接行列)で表すと、そのべき乗 \(A^{n}\) の \(i\) 行 \(j\) 列の成分が「\(i\) から \(j\) へちょうど \(n\) 本の線をたどって行く行き方の数」になります。
乗り換え案内やSNSの「友達の友達」の分析は、この考え方が土台の一つになっています。
国や都道府県の経済統計では、産業同士が原材料をやり取りする量を大きな行列(産業連関表)で表します。「ある産業の需要が増えると他の産業の生産がどれだけ増えるか」という波及効果を、この行列の計算で見積もります(レオンチェフが考案し、ノーベル経済学賞を受けた手法です)。
文章や画像を扱うAI(ニューラルネットワーク)の計算は、その大部分が「入力の数値の並びに、学習した行列を掛ける」ことのくり返しです。
AIの学習・実行に使われる計算量の多くが行列の掛け算だからこそ、行列計算が得意なGPUがAI開発に欠かせない存在になっています。
式
用語・記号の解説
記号
| \(A,\ B\) | エー、ビー | 行列につける名前。行列はアルファベットの大文字で表すのが慣例です。 |
| \(a_{ij}\) | エー・アイ・ジェー エーのアイジェー成分 | 行列 \(A\) の \(i\) 行 \(j\) 列の成分(上から \(i\) 行目・左から \(j\) 列目にある数)。右下の小さい文字(添え字)が「場所」を表します。 |
| \(b_{ij}\) | ビー・アイ・ジェー | 行列 \(B\) の \(i\) 行 \(j\) 列の成分。\(a_{ij}\) と同じ読み方で、行列の名前だけが違います。 |
| \(m \times n\) | エム・かける・エヌ | 行列のサイズ(型)。行(横の並び)が \(m\) 本、列(縦の並び)が \(n\) 本あることを表します。(例:2×3行列は、数が縦に2個・横に3個、あわせて6個並んだ行列) |
| \(c_{ij}\) | シー・アイ・ジェー | 積 \(AB\) を \(C\) と置いたときの、\(C\) の \(i\) 行 \(j\) 列の成分。 |
| \(A^{T}\) | エー・ティー エーの転置 | \(A\) の転置行列。行と列を入れ替えた行列で、\({}^{t}A\) と書く流儀もあります。 |
| \(A^{n}\) | エーのエヌ乗 | \(A\) を \(n\) 個掛け合わせた行列。正方行列でだけ定義できます。 |
| \(\sum\) | シグマ | 「足し合わせる」ことを表す記号。\(\sum_{k=1}^{n} a_{ik} b_{kj}\) は「\(k\) を1から \(n\) まで変えながら \(a_{ik} b_{kj}\) を全部足す」という意味です。 |
用語
| 行列 | ぎょうれつ | 数を長方形(縦横)の形に並べたもの。並んだ1つ1つの数を成分と呼びます。表計算の表のように「何行目・何列目」で場所を指定します。 |
| 行 | ぎょう | 行列の「横の並び」。上から順に1行目、2行目…と数えます。 |
| 列 | れつ | 行列の「縦の並び」。左から順に1列目、2列目…と数えます。「行が横・列が縦」は、漢字の形(「行」の横線・「列」の縦線のイメージ)で覚えるのが定番です。 |
| 成分 | せいぶん | 行列の中の1つ1つの数。要素と呼ぶこともあります。\(i\) 行 \(j\) 列の成分を \(a_{ij}\) のように添え字で表します。 |
| 正方行列 | せいほうぎょうれつ | 行数と列数が同じ(正方形の形をした)行列。べき乗や、このページでは扱わない行列式・逆行列は正方行列でだけ考えます。 |
| 転置行列 | てんちぎょうれつ | 行と列を入れ替えた行列。\(m \times n\) 行列の転置は \(n \times m\) 行列になります。 |
| 内積 | ないせき | 2つの数の並びを「先頭から順にペアで掛けて、全部足した」値。行列の掛け算では、Aの行とBの列の内積が積の1つの成分になります。 |
| 線形代数 | せんけいだいすう | 行列やベクトルを扱う数学の分野。大学初年次の必修科目として学ぶことが多く、CG・統計・AIなど応用の土台になっています。 |
前提として理解しておくといいこと
このページの計算を「意味がわかって」使えるようになるために、前提として理解しておくといいことをまとめました。
| 正負の数の四則計算(中学1年) |
|
| 文字式と添え字(中学1年〜高校) |
|
| 累乗(中学1年) |
|
| 表の行と列(小学校〜) |
|
Excelで計算する方法
| 行列Aの1行目 | 1 | 2 |
| 行列Aの2行目 | 3 | 4 |
| 行列Bの1行目 | 5 | 6 |
| 行列Bの2行目 | 7 | 8 |
| A+Bの1行目 | =B1+B3 | =C1+C3 |
| A+Bの2行目 | =B2+B4 | =C2+C4 |
| 行列Aの1行目 | 9 | 8 |
| 行列Aの2行目 | 7 | 6 |
| 行列Bの1行目 | 1 | 2 |
| 行列Bの2行目 | 3 | 4 |
| A−Bの1行目 | =B1-B3 | =C1-C3 |
| A−Bの2行目 | =B2-B4 | =C2-C4 |
| 行列Aの1行目 | 1 | 2 |
| 行列Aの2行目 | 3 | 4 |
| 行列Bの1行目 | 2 | 0 |
| 行列Bの2行目 | 1 | 2 |
| ABの1行目から自動で広がる | =MMULT(B1:C2,B3:C4) |
| 行列Aの1行目 | 1 | 2 | 3 |
| 行列Aの2行目 | 4 | 5 | 6 |
| Aᵀの1行目から自動で広がる | =TRANSPOSE(B1:D2) |
| 行列Aの1行目 | 1 | 1 |
| 行列Aの2行目 | 0 | 1 |
| A³の1行目から自動で広がる | =MMULT(MMULT(B1:C2,B1:C2),B1:C2) |
掛け算はMMULT関数、転置はTRANSPOSE関数を使います。最近のExcel(Microsoft 365など)では結果が自動で隣のセルに広がります(スピル)。3つ目の表ならABは 4・4・10・8、5つ目の表ならA³は 1・3・0・1 になります。
古いExcelでは、先に結果と同じサイズの範囲を選択してから数式を入力し、Ctrl+Shift+Enterで確定してください。
Googleスプレッドシートで計算する方法
| 行列Aの1行目 | 1 | 2 |
| 行列Aの2行目 | 3 | 4 |
| 行列Bの1行目 | 5 | 6 |
| 行列Bの2行目 | 7 | 8 |
| A+Bの1行目 | =B1+B3 | =C1+C3 |
| A+Bの2行目 | =B2+B4 | =C2+C4 |
| 行列Aの1行目 | 1 | 2 |
| 行列Aの2行目 | 3 | 4 |
| 行列Bの1行目 | 2 | 0 |
| 行列Bの2行目 | 1 | 2 |
| ABの1行目から自動で広がる | =MMULT(B1:C2,B3:C4) |
| 行列Aの1行目 | 1 | 2 | 3 |
| 行列Aの2行目 | 4 | 5 | 6 |
| Aᵀの1行目から自動で広がる | =TRANSPOSE(B1:D2) |
| 行列Aの1行目 | 1 | 1 |
| 行列Aの2行目 | 0 | 1 |
| A³の1行目から自動で広がる | =MMULT(MMULT(B1:C2,B1:C2),B1:C2) |
Googleスプレッドシートでは、MMULT・TRANSPOSEの結果は自動で隣のセルに広がります(Ctrl+Shift+Enterは不要です)。
Pythonで計算する方法
A = [[1, 2], [3, 4]]
B = [[2, 0], [1, 2]]
def matrix_add(x, y): # 足し算(同じ位置の成分同士を足す)
return [[x[i][j] + y[i][j] for j in range(len(x[0]))] for i in range(len(x))]
def matrix_multiply(x, y): # 掛け算(Aの行とBの列の内積)
return [[sum(x[i][k] * y[k][j] for k in range(len(y))) for j in range(len(y[0]))] for i in range(len(x))]
def matrix_transpose(x): # 転置(行と列を入れ替える)
return [[x[i][j] for i in range(len(x))] for j in range(len(x[0]))]
def matrix_power(x, n): # べき乗(前から順にn回掛ける)
result = x
for _ in range(n - 1):
result = matrix_multiply(result, x)
return result
print("A + B =", matrix_add(A, B))
print("AB =", matrix_multiply(A, B))
print("Aの転置 =", matrix_transpose(A))
print("Aの3乗 =", matrix_power(A, 3))
数式記述言語(LaTeX等)での書き方(コピペ可)
(A + B)ᵢⱼ = aᵢⱼ + bᵢⱼ
(A + B)_{ij} = a_{ij} + b_{ij}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mrow><mo>(</mo><mi>A</mi><mo>+</mo><mi>B</mi><mo>)</mo></mrow>
<mrow><mi>i</mi><mi>j</mi></mrow>
</msub>
<mo>=</mo>
<msub><mi>a</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub>
<mo>+</mo>
<msub><mi>b</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub>
</mrow>
</math>
(A + B)_(ij) = a_(ij) + b_(ij)
A + B
C := A + B;
C = A + B;
(A + B)_ij = a_ij + b_ij
cᵢⱼ = aᵢ₁b₁ⱼ + aᵢ₂b₂ⱼ + ⋯ + aᵢₙbₙⱼ
c_{ij} = \sum_{k=1}^{n} a_{ik} b_{kj}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub><mi>c</mi><mrow><mi>i</mi><mi>j</mi></mrow></msub>
<mo>=</mo>
<munderover>
<mo>∑</mo>
<mrow><mi>k</mi><mo>=</mo><mn>1</mn></mrow>
<mi>n</mi>
</munderover>
<msub><mi>a</mi><mrow><mi>i</mi><mi>k</mi></mrow></msub>
<msub><mi>b</mi><mrow><mi>k</mi><mi>j</mi></mrow></msub>
</mrow>
</math>
c_(ij) = sum_(k=1)^(n) a_(ik) b_(kj)
A . B
C := A . B;
C = A * B;
c_ij = ∑_(k=1)^n a_ik b_kj
(Aᵀ)ᵢⱼ = aⱼᵢ
(A^{T})_{ij} = a_{ji}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msub>
<mrow><mo>(</mo><msup><mi>A</mi><mi>T</mi></msup><mo>)</mo></mrow>
<mrow><mi>i</mi><mi>j</mi></mrow>
</msub>
<mo>=</mo>
<msub><mi>a</mi><mrow><mi>j</mi><mi>i</mi></mrow></msub>
</mrow>
</math>
(A^T)_(ij) = a_(ji)
Transpose[A]
C := LinearAlgebra:-Transpose(A);
C = A.';
(A^T)_ij = a_ji
Aⁿ = AA⋯A
A^{n} = \underbrace{AA\cdots A}_{n}
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block">
<mrow>
<msup><mi>A</mi><mi>n</mi></msup>
<mo>=</mo>
<mi>A</mi><mi>A</mi><mo>⋯</mo><mi>A</mi>
</mrow>
</math>
A^n
MatrixPower[A, n]
C := A^n;
C = A^n;
A^n
ChatGPT に聞いて計算してもらう方法
あなたは行列計算のアシスタントです。次の計算を、必ずPythonコードを実際に実行して行い、実行結果の数値だけを根拠に回答してください(暗算や推測で答えないでください)。 行列 A = [[1, 2], [3, 4]]、行列 B = [[2, 0], [1, 2]] について、次の行列をそれぞれ求めてください。 1. 足し算 A + B 2. 引き算 A − B 3. 掛け算 AB 4. Aの転置行列 5. Aの3乗 それぞれ、計算に使った式(どの成分をどう計算したか)と、実行結果の行列を示してください。
計算ドリル(演習問題)
このページの計算(足し算・引き算・掛け算・転置・べき乗)を、自分の手で計算できるようになるための演習問題です。
答えと解説は解答ページにあります。
使い方
-
1数値を入力計算したい数値を入力欄に入力します
-
2計算「計算する」ボタンを押します
-
3結果を確認計算結果がその場に表示されます。計算の考え方や式の解説も同じページで確認できます
DataChefの特徴
専門知識不要、直感的で簡単な操作
個人情報を登録することなく使用できます
「ダウンロード」押下でファイルを自動削除
クレジット表記不要
商用利用許諾の連絡も不要です
