数学の教科書やプログラミングで「diag」という記号や関数を見たことはありませんか?
「diag(A)」や「diag(1, 2, 3)」といった表記は、線形代数やデータ分析でよく登場します。でも、初めて見ると「これって何?」と戸惑いますよね。
この記事では、diagの基本的な意味から、対角行列の性質、プログラミングでの使い方まで、分かりやすく解説していきます!
diagとは?【基本的な意味】

diagの語源
「diag」は英語の「diagonal(ダイアゴナル)」の略です。日本語では「対角」という意味になります。
数学では、主に次の2つの意味で使われます:
- 対角行列を作る関数
- 行列の対角成分を取り出す関数
対角とは?
対角とは、行列の左上から右下に向かう斜めのラインのことです。
例えば、3×3の行列の場合:
[a b c]
[g h i]
この中で、a、e、iが「対角成分」または「対角要素」と呼ばれます。左上から右下へ斜めに並んでいますね。
対角行列とは?【diagで作られる行列】
対角行列の定義
対角行列とは、対角成分以外がすべて0の行列のことです。英語では「diagonal matrix」といいます。
対角行列の例:
[2 0 0]
[0 5 0]
[0 0 3]
この行列では、2、5、3だけが値を持っていて、それ以外はすべて0です。
対角行列の特徴
対角行列には便利な性質がたくさんあります:
特徴1:計算が簡単
対角行列同士の掛け算は、対角成分同士を掛けるだけでOK。
[a 0 0] [d 0 0] [ad 0 0 ]
[0 b 0] × [0 e 0] = [0 be 0 ]
[0 0 c] [0 0 f] [0 0 cf]
特徴2:逆行列が簡単に求まる
対角成分をそれぞれ逆数にするだけです(0でない場合)。
[2 0 0]の逆行列は [1/2 0 0 ]
[0 3 0] [0 1/3 0 ]
[0 0 4] [0 0 1/4]
特徴3:固有値が一目で分かる
対角行列の固有値は、対角成分そのものになります。
diag関数の使い方【2つの役割】
diag関数には、入力によって異なる2つの使い方があります。
使い方1:ベクトルから対角行列を作る
数値のリストやベクトルを入力すると、それを対角成分とする対角行列を作ってくれます。
入力: [1, 2, 3]
出力:
[1 0 0]
[0 2 0]
[0 0 3]
これは「1、2、3を対角成分に持つ3×3の対角行列を作りなさい」という意味です。
使い方2:行列から対角成分を取り出す
行列を入力すると、その対角成分をベクトルとして取り出してくれます。
入力:
[4 5 6]
[7 8 9]
[1 2 3]
出力: [4, 8, 3]
対角成分だけを抜き出しているわけですね。
プログラミング言語でのdiag関数
数学のソフトウェアやプログラミング言語では、diag関数が標準で用意されていることが多いです。
MATLABでのdiag
MATLABは数値計算ソフトウェアで、行列操作が得意です。
ベクトルから対角行列を作る:
v = [1, 2, 3];
D = diag(v)
結果:
D =
1 0 0
0 2 0
0 0 3
行列から対角成分を取り出す:
A = [4 5 6; 7 8 9; 1 2 3];
d = diag(A)
結果:
d =
4
8
3
Pythonでのdiag(NumPy)
PythonのNumPyライブラリでもdiag関数が使えます。
ベクトルから対角行列を作る:
import numpy as np
v = [1, 2, 3]
D = np.diag(v)
print(D)
結果:
[[1 0 0]
[0 2 0]
[0 0 3]]
行列から対角成分を取り出す:
A = np.array([[4, 5, 6],
[7, 8, 9],
[1, 2, 3]])
d = np.diag(A)
print(d)
結果:
[4 8 3]
Rでのdiag
統計解析言語Rでもdiag関数が使えます。
ベクトルから対角行列を作る:
v <- c(1, 2, 3)
D <- diag(v)
print(D)
結果:
[,1] [,2] [,3]
[1,] 1 0 0
[2,] 0 2 0
[3,] 0 0 3
対角行列の記号表記

数学の論文や教科書では、対角行列を記号で表すことがあります。
一般的な記号
diag(a₁, a₂, …, aₙ)
これは次のような対角行列を表します:
[a₁ 0 0 ... 0 ]
[0 a₂ 0 ... 0 ]
[0 0 a₃ ... 0 ]
[⋮ ⋮ ⋮ ⋱ ⋮ ]
[0 0 0 ... aₙ]
具体例
diag(2, 5, 3)は:
[2 0 0]
[0 5 0]
[0 0 3]
diag(1, 1, 1)は:
[1 0 0]
[0 1 0]
[0 0 1]
これは単位行列と呼ばれる特別な対角行列です。
対角化とdiagの関係
線形代数では「対角化」という重要な概念があります。
対角化とは?
一般的な行列Aを、対角行列Dに変換することです。
式で表すと:
A = PDP⁻¹
P:固有ベクトルを並べた行列
D:固有値を対角成分に持つ対角行列
P⁻¹:Pの逆行列
なぜ対角化するの?
対角行列は計算がとても簡単だからです。
例:行列のn乗を求める
Aのn乗を直接計算するのは大変ですが、対角化すると:
Aⁿ = (PDP⁻¹)ⁿ = PDⁿP⁻¹
Dは対角行列なので、Dⁿは各対角成分をn乗するだけでOK!
もしD = [2 0 0]なら、D³ = [8 0 0 ]
[0 3 0] [0 27 0 ]
[0 0 5] [0 0 125]
対角成分以外のdiag応用
diagには対角成分以外を扱う拡張機能もあります。
上側の対角線(super-diagonal)
対角線の1つ上のラインです。
例:
[0 a 0 0]
[0 0 b 0]
[0 0 0 c]
[0 0 0 0]
MATLABでは:
D = diag([1, 2, 3], 1)
「1」は「1つ上の対角線」という意味です。
下側の対角線(sub-diagonal)
対角線の1つ下のラインです。
例:
[0 0 0 0]
[0 b 0 0] [0 0 c 0]
MATLABでは:
D = diag([1, 2, 3], -1)
「-1」は「1つ下の対角線」という意味です。
対角行列の実用例
対角行列は理論だけでなく、実際の問題でもよく使われます。
データのスケール変換
データ分析では、各変数のスケールを変えるために対角行列を使います。
例:
元のデータ: [x₁, x₂, x₃]
スケール行列: diag(2, 0.5, 3)
変換後: [2x₁, 0.5x₂, 3x₃]
物理学での慣性モーメント
物体の回転に関する慣性モーメントテンソルは、適切な座標系では対角行列になります。
量子力学での演算子
量子力学のオブザーバブル(観測可能な量)を表す演算子は、固有状態の基底で対角化されます。
経済学での入出力分析
産業連関表の分析で、対角行列が使われます。
単位行列と零行列
対角行列の中でも特別なものを紹介します。
単位行列(Identity Matrix)
すべての対角成分が1の対角行列です。
記号: I または Eₙ(n×nの場合)
例(3×3の場合):
I = [1 0 0]
[0 1 0]
[0 0 1]
性質:
どんな行列Aに対しても:
AI = IA = A
単位行列は掛け算の「1」のような役割をします。
零行列(Zero Matrix)
すべての成分が0の行列です。
記号: O または 0
例(3×3の場合):
O = [0 0 0]
[0 0 0]
[0 0 0]
性質:
どんな行列Aに対しても:
A + O = A
AO = OA = O
diagを使った練習問題
理解を深めるために、いくつか問題を解いてみましょう。
問題1
diag(4, 7, 2)で表される対角行列を書きなさい。
解答:
[4 0 0]
[0 7 0]
[0 0 2]
問題2
次の行列の対角成分を求めなさい。
[5 2 8]
[1 3 6]
[9 4 7]
解答:
対角成分は[5, 3, 7]
問題3
diag(2, 2, 2)の逆行列を求めなさい。
解答:
各対角成分の逆数を取ればよいので:
[1/2 0 0 ]
[0 1/2 0 ]
[0 0 1/2]
または diag(0.5, 0.5, 0.5)
対角行列の判定方法
ある行列が対角行列かどうかを判定する方法です。
定義による判定
すべての非対角成分(i≠jのときのaᵢⱼ)が0かどうか確認します。
プログラムでの判定
Pythonの例:
import numpy as np
def is_diagonal(A):
# 行列と、その対角成分だけの行列を比較
return np.allclose(A, np.diag(np.diag(A)))
A = np.array([[2, 0, 0],
[0, 5, 0],
[0, 0, 3]])
print(is_diagonal(A)) # True
よくある疑問
Q1: 長方形の行列でもdiagは使える?
はい、使えます。ただし、取り出せる対角成分の数は、行数と列数の小さい方になります。
例(2×3行列):
[1 2 3]
[4 5 6]
対角成分は[1, 5]だけです。
Q2: diagの読み方は?
「ダイアグ」または「ディアグ」と読みます。「diagonal」の略なので、「ダイアゴナル」と読む人もいます。
Q3: 対角行列の行列式は?
対角成分の積になります。
例:
det(diag(2, 3, 5)) = 2 × 3 × 5 = 30
Q4: すべての行列は対角化できる?
いいえ、対角化できない行列も存在します。対角化できる条件は、行列が「固有ベクトルを十分に持つこと」です。
まとめ
diagは線形代数で頻繁に使う重要な概念です。
この記事のポイント
- diagは「diagonal(対角)」の略
- 主に2つの使い方がある:対角行列を作る、対角成分を取り出す
- 対角行列は計算が簡単で、多くの便利な性質を持つ
- MATLAB、Python、Rなどのプログラミング言語で標準的に使える
- 単位行列はすべての対角成分が1の特別な対角行列
- 対角化は複雑な行列計算を簡単にする強力な手法
線形代数やデータ分析を学ぶ上で、diagと対角行列の理解は欠かせません。最初は記号に戸惑うかもしれませんが、実際に使ってみると、その便利さが実感できますよ!

