【Pythonで学ぶ線形代数学講座(21)】行列のトレース(跡)
行列のトレース(対角和)
$n\times n$ の正方行列
\[A=\begin{bmatrix}a_{11}&a_{12} &\cdots &a_{1n}\\a_{21}&a_{22} &\cdots &a_{2n}\\\vdots & \vdots &\ddots &\vdots\\a_{n1}&a_{n2} &\cdots &a_{nn}\end{bmatrix}\]
について、主対角成分 (左上から右下に伸びる対角線上の成分) の総和
\[a_{11}+a_{22}+\ \cdots\ +a_{nn}\tag{1}\]
を行列 $A$ の トレース(対角和)とよび、$\mathrm{tr}A$ で表します。稀にドイツ語の Spur の訳である跡(せき)という言葉が使われることもあります。たとえば、$4\times 4$ の正方行列
\[A=\begin{bmatrix}5 & 7 & 1& 0\\9 & 2 & 8& 1\\3 & 6 & 5& 5\\4 & 0 & 7& 6\\\end{bmatrix}\]
のトレースを計算すると $\mathrm{tr}A=5+2+5+6=18$ となります。
トレースの性質
行列 $A$ のトレースは線形写像です。
すなわち、任意の行列 $A,\ B$ とスカラー$k$ について
\[\begin{align*}&\mathrm{tr}(A+B)=\mathrm{tr}A+\mathrm{tr}B\tag{2}\\[6pt]&\mathrm{tr}(kA)=k\mathrm{tr}A\tag{3}\end{align*}\]
が成り立ちます。
一般に行列積について $AB=BA$ は保障されませんが、トレースの値は保存されます:
\[\mathrm{tr}(AB)=\mathrm{tr}(BA)\tag{4}\]
実際、$2\times 2$ の正方行列
\[A=\begin{bmatrix}a & b\\c & d\end{bmatrix},\quad B=\begin{bmatrix}e & f\\g & h\end{bmatrix}\]
について行列積は
\[\begin{align*}AB=\begin{bmatrix}ae+bg & af+bh\\ce+dg & cf+dh\end{bmatrix}\\[6pt]BA=\begin{bmatrix}ae+cf & be+df\\ag+ch & bg+dh\end{bmatrix}\end{align*}\]
なので、トレースを計算すると
\[\begin{align*}&\mathrm{tr}(AB)=ae+bg+cf+dh\\[6pt]&\mathrm{tr}(BA)=ae+cf+bg+dh\end{align*}\]
となって、確かに $\mathrm{tr}(AB)=\mathrm{tr}(BA)$ が成り立っています。
行列 $A$ の 転置 についてもトレースは不変です。すなわち
\[\mathrm{tr}A^T=\mathrm{tr}A\]
が成り立ちます。
numpy.trace()
numpy.trace() に行列 a を渡すと a のトレースを返します。
行列積 $AB$ のトレースと $BA$ のトレースが一致することを確認してみます。
# numpy_trace # In[1] import numpy as np # 乱数ジェネレータを初期化 np.random.seed(15) # 行列aを定義 # [[8 5 5] # [7 0 7] # [5 6 1]] a = np.random.randint(0, 10, (3, 3)) # 行列bを定義 # [[7 0 4] # [9 7 5] # [3 6 8]] b = np.random.randint(0, 10, (3, 3)) # 行列積abを計算 ab = np.dot(a, b) # 行列積baを計算 ba = np.dot(b, a) # abのトレース tr_ab = np.trace(ab) # baのトレース tr_ba = np.trace(ba) print("行列積ab\n{}\n".format(ab)) print("行列積ba\n{}\n".format(ba)) print("tr(ab) : {}".format(tr_ab)) print("tr(ba) : {}".format(tr_ba)) '''実行結果 行列積ab [[116 65 97] [ 70 42 84] [ 92 48 58]] 行列積ba [[ 76 59 39] [146 75 99] [106 63 65]] tr(ab) : 216 tr(ba) : 216 '''
コメント
行列のトレースをChatGPTが対話形式で解説します
生徒: 先生、行列のトレースって何ですか?聞いたことがありますが、具体的にはどういう意味なのでしょうか?
先生: いい質問です。行列のトレースは、主対角線上の要素の和を指します。つまり、行列の左上から右下にかけての要素の和です。
生徒: なるほど、トレースは主対角線上の要素の和なんですね。それで、トレースを求める具体的な手順はどうなりますか?
先生: トレースを求める手順は非常に簡単です。ただし、行列の次元によって異なる点に注意してください。たとえば、3×3の行列の場合、主対角線上の要素を足し合わせるだけです。それが行列のトレースになります。
生徒: なるほど、単純に主対角線上の要素を足し合わせるだけでいいんですね。でも、トレースを求めることには何の意味があるんですか?
先生: トレースにはいくつかの応用があります。一つは行列の追跡とも呼ばれる追跡イデンティティです。追跡イデンティティでは、行列のトレースを利用して行列の性質を表現することができます。また、トレースは行列の性質の一つとして重要な役割を果たします。行列のトレースを計算することで、行列の対称性やトレースが同じであれば行列が類似していることがわかります。
生徒: なるほど、トレースには行列の性質を表現する役割があるんですね。それは面白そうです。もっとトレースについて学んでみたいです。
先生: 素晴らしいですね。トレースは行列の重要な概念であり、さまざまな数学や応用数学の分野で使われます。さらに学んでいくと、行列の特性や応用の幅が広がりますよ。ぜひ、興味を持って学んでみてください。