数学 において、行列 の対から別の行列を作り出す二項演算 としての行列の乗法 (ぎょうれつのじょうほう)は、実数 や複素数 などの数 が初等的な四則演算 でいうところの乗法 を持つことと対照的に、そのような「数の配列」の間の乗法として必ずしも一意的な演算を指しうるものではない。そのような意味では、一般に「行列の乗法」は幾つかの異なる二項演算を総称するものと考えることができる。行列の乗法の持つ重要な特徴には、与えられた行列の行および列の数(行列の型やサイズあるいは次元と呼ばれるもの)が関係して、得られる行列の成分がどのように特定されるかが述べられるということが挙げられる。
例えば、ベクトル の場合と同様に、任意の行列に対してスカラー を掛けるという操作が、その行列の全ての成分に同じ数を掛けるという方法で与えられる。また、加法や減法 (英語版 ) の場合と同様に、同じサイズの行列に対して成分ごとの乗法を入れることによって定まる行列の積はアダマール積 と呼ばれる。それ以外にも、二つの行列のクロネッカー積 は区分行列 として得られる。
このようにさまざまな乗法が定義できるという事情の中にあっても、しかし最も重要な行列の乗法は連立一次方程式 やベクトルの一次変換 に関するもので、応用数学 や工学 へも広く応用がある。これは通例、行列の積 (ぎょうれつのせき、英 : matrix product [1] [2] )と呼ばれるもので、A が n × m 行列で、B が m × p 行列ならば、それらの行列の積 AB が n × p 行列として与えられ、その成分は A の各行の m 個の成分がそれぞれ順番に B の各列の m 個の成分と掛け合わされる形で与えられる(後述 )。
この通常の積は可換 ではないが、結合的 かつ行列の加法に対して分配的 である。この行列の積に関する単位元 (数において 1 を掛けることに相当するもの)は単位行列 であり、正方行列 は逆行列 (数における逆数 に相当)を持ち得る。行列の積に関して行列式 は乗法的 である。一次変換 や行列群 あるいは群の表現 などの理論を考える上において行列の積は重要な演算となる。
行列のサイズが大きくなれば、二つあるいはそれ以上の行列の積の計算を定義に従って行うには、非常に膨大な時間が掛かるようになってしまうため、効果的に行列の積を計算できるアルゴリズムが考えられてきた。
行列に付随するもっとも単純な形の乗法としてスカラー乗法が挙げられる(これはクロネッカー積 の特別の場合になっている)。
行列 A のスカラー λ による左スカラー倍 (英 : left scalar multiplication )は、
λ
A
=
(
λ
a
i
j
)
{\displaystyle \lambda A=(\lambda a_{ij})}
で与えられる A と同じサイズの行列 λA となる。つまり、
λ
A
=
λ
[
a
11
a
12
⋯
a
1
m
a
21
a
22
⋯
a
2
m
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
m
]
=
[
λ
a
11
λ
a
12
⋯
λ
a
1
m
λ
a
21
λ
a
22
⋯
λ
a
2
m
⋮
⋮
⋱
⋮
λ
a
n
1
λ
a
n
2
⋯
λ
a
n
m
]
{\displaystyle \lambda A=\lambda {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}={\begin{bmatrix}\lambda a_{11}&\lambda a_{12}&\cdots &\lambda a_{1m}\\\lambda a_{21}&\lambda a_{22}&\cdots &\lambda a_{2m}\\\vdots &\vdots &\ddots &\vdots \\\lambda a_{n1}&\lambda a_{n2}&\cdots &\lambda a_{nm}\end{bmatrix}}\ }
同様に、行列 A のスカラー λ による右スカラー倍 (英 : right scalar multiplication )は
A
λ
=
[
a
11
a
12
⋯
a
1
m
a
21
a
22
⋯
a
2
m
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
m
]
λ
=
[
a
11
λ
a
12
λ
⋯
a
1
m
λ
a
21
λ
a
22
λ
⋯
a
2
m
λ
⋮
⋮
⋱
⋮
a
n
1
λ
a
n
2
λ
⋯
a
n
m
λ
]
{\displaystyle A\lambda ={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}\lambda ={\begin{bmatrix}a_{11}\lambda &a_{12}\lambda &\cdots &a_{1m}\lambda \\a_{21}\lambda &a_{22}\lambda &\cdots &a_{2m}\lambda \\\vdots &\vdots &\ddots &\vdots \\a_{n1}\lambda &a_{n2}\lambda &\cdots &a_{nm}\lambda \end{bmatrix}}}
で定義される。
基礎とする環 が(例えば実 または複素数 体 のような)可換環 ならば、左及び右スカラー倍の概念は一致して、単にスカラー倍 と呼ばれる。より一般の環では(四元数 体のように)非可換であるから左右が異なれば異なる乗法である。
二つの行列の積
まずは二つの行列を掛け合わせることを考える(任意個数への一般化は後述)。
行列の積の計算過程の図示。行列A の第i 行 と行列B の第j 列 の各成分の積を実線部分のように取り、続いて点線のように加えていくことにより、積AB のij 成分を得る。
n × m 行列 A と m × p 行列 B を
A
=
[
a
11
a
12
⋯
a
1
m
a
21
a
22
⋯
a
2
m
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
m
]
,
B
=
[
b
11
b
12
⋯
b
1
p
b
21
b
22
⋯
b
2
p
⋮
⋮
⋱
⋮
b
m
1
b
m
2
⋯
b
m
p
]
{\displaystyle A={\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}},\quad B={\begin{bmatrix}b_{11}&b_{12}&\cdots &b_{1p}\\b_{21}&b_{22}&\cdots &b_{2p}\\\vdots &\vdots &\ddots &\vdots \\b_{m1}&b_{m2}&\cdots &b_{mp}\end{bmatrix}}}
とするとき、これらの行列の積 AB (通例、乗法記号は特に用いずに併置で表す)は、
各 (i, j ) 成分 cij が A の第 i 行に横に並ぶ成分 aik と B の第 j 列に縦に並ぶ成分 bkj を k = 1, 2, ..., m に亙って足し合わせた和
c
i
j
=
∑
k
=
1
m
a
i
k
b
k
j
{\displaystyle c_{ij}=\sum _{k=1}^{m}a_{ik}b_{kj}}
で与えられる n × p 行列
A
B
=
[
c
11
c
12
⋯
c
1
p
c
21
c
22
⋯
c
2
p
⋮
⋮
⋱
⋮
c
n
1
c
n
2
⋯
c
n
p
]
{\displaystyle AB={\begin{bmatrix}c_{11}&c_{12}&\cdots &c_{1p}\\c_{21}&c_{22}&\cdots &c_{2p}\\\vdots &\vdots &\ddots &\vdots \\c_{n1}&c_{n2}&\cdots &c_{np}\end{bmatrix}}}
である[3] [4] [5] [6] 。従って、積 AB が定義されるのは A の列の本数と B の行の本数が一致している場合に限られる(今の場合は m 本)。
多数の行列の積
二つ以上の個数の行列に対しても、それらの連続する各対に関してサイズの条件が満たされるならば、行列の積を定義することができる。
n -個の行列 A 1 , A 2 , ..., A n がそれぞれサイズ s 0 × s 1 , s 1 × s 2 , ..., s n − 1 × s n であるとき(ここで s 0 , s 1 , s 2 , ..., s n は何れも単に正整数であって、これらの下付き添数はそれぞれどの行列に対応するのかを示す以上の意味は無い)、これら行列の積
∏
i
=
1
n
A
i
=
A
1
A
2
⋯
A
n
=
(
a
i
j
(
1
)
)
(
a
i
j
(
2
)
)
⋯
(
a
i
j
(
n
)
)
{\displaystyle \prod _{i=1}^{n}A_{i}=A_{1}A_{2}\cdots A_{n}=(a_{ij}^{(1)})(a_{ij}^{(2)})\cdots (a_{ij}^{(n)})}
は s 0 × s n 行列であり、その任意の (i 0 , i n ) -成分は
∑
i
1
=
1
s
1
∑
i
2
=
1
s
2
⋯
∑
i
n
−
1
=
1
s
n
−
1
a
i
0
,
i
1
(
1
)
a
i
1
,
i
2
(
2
)
⋯
a
i
n
−
1
,
i
n
(
n
)
{\displaystyle \sum _{i_{1}=1}^{s_{1}}\sum _{i_{2}=1}^{s_{2}}\cdots \sum _{i_{n-1}=1}^{s_{n-1}}a_{i_{0},i_{1}}^{(1)}a_{i_{1},i_{2}}^{(2)}\cdots a_{i_{n-1},i_{n}}^{(n)}}
で与えられる。
行列の冪
正方 行列に関しては、行の本数と列の本数が常に等しいから、通常の数と同様に自分自身を繰り返し掛けることができて、この行列の積の特別の場合としての反復乗積は行列の冪 (英 : matrix power )を定義することができる。行の本数と列の本数が一致しない一般の矩形 行列では冪を考えることができない。即ち、n × n 行列 A と正整数 k に対して
A
k
=
A
A
⋯
A
k
times
{\displaystyle A^{k}={\underset {k{\text{ times}}}{AA\cdots A}}}
冪 の逆として行列の冪根 を考えたり、また冪級数 として行列の指数函数 やその逆写像として行列の対数函数 などを定義したりすることもできる。
二つの行列に対して定義されるその他の乗法を以下にいくつか挙げる。実は通常の乗法よりも定義としては単純なものもいくつかある。
アダマール積
同じサイズの二つの行列に対し、アダマール積 (英 : Hadamard product )、要素ごとの積 (英 : element-wise product )、点ごとの積 (英 : pointwise product )、成分ごとの積 (英 : entrywise product )あるいはシューア積 (英 : Schur product )などと呼ばれる積を定義することができる[7] 。同じサイズの二つの行列 A , B のアダマール積 A ○ B はもとと同じサイズの行列で、その (i , j ) -成分は A の (i, j ) -成分と B の (i , j ) -成分との積で与えられる。つまり、
A
∘
B
=
(
a
i
j
b
i
j
)
{\displaystyle A\circ B=(a_{ij}b_{ij})}
全部書けば、
[
a
11
a
12
⋯
a
1
m
a
21
a
22
⋯
a
2
m
⋮
⋮
⋱
⋮
a
n
1
a
n
2
⋯
a
n
m
]
∘
[
b
11
b
12
⋯
b
1
m
b
21
b
22
⋯
b
2
m
⋮
⋮
⋱
⋮
b
n
1
b
n
2
⋯
b
n
m
]
=
[
a
11
b
11
a
12
b
12
⋯
a
1
m
b
1
m
a
21
b
21
a
22
b
22
⋯
a
2
m
b
2
m
⋮
⋮
⋱
⋮
a
n
1
b
n
1
a
n
2
b
n
2
⋯
a
n
m
b
n
m
]
{\displaystyle {\begin{bmatrix}a_{11}&a_{12}&\cdots &a_{1m}\\a_{21}&a_{22}&\cdots &a_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}&a_{n2}&\cdots &a_{nm}\end{bmatrix}}\circ {\begin{bmatrix}b_{11}&b_{12}&\cdots &b_{1m}\\b_{21}&b_{22}&\cdots &b_{2m}\\\vdots &\vdots &\ddots &\vdots \\b_{n1}&b_{n2}&\cdots &b_{nm}\end{bmatrix}}={\begin{bmatrix}a_{11}b_{11}&a_{12}b_{12}&\cdots &a_{1m}b_{1m}\\a_{21}b_{21}&a_{22}b_{22}&\cdots &a_{2m}b_{2m}\\\vdots &\vdots &\ddots &\vdots \\a_{n1}b_{n1}&a_{n2}b_{n2}&\cdots &a_{nm}b_{nm}\end{bmatrix}}\ }
この演算は(mn 個ある各成分において)通常の数の積を一斉に行うことに他ならない。故にアダマール積は可換 、結合的 、かつ成分ごとの和に対して分配的 になる。これはまた、クロネッカー積の主小行列 でもある。
フロベニウス積
フロベニウス(内)積 (英 : Frobenius inner product )は行列を単にベクトルと見做してとった成分ごとの内積で、A : B などと書かれることもある。これはアダマール積の成分の和でもあり、具体的に書けば
A
:
B
=
∑
i
,
j
a
i
j
b
i
j
=
vec
(
t
A
)
vec
(
B
)
=
tr
(
t
A
B
)
=
tr
(
A
t
B
)
{\displaystyle A:B=\sum _{i,j}a_{ij}b_{ij}=\operatorname {vec} ({}^{t}\!A)\operatorname {vec} (B)=\operatorname {tr} ({}^{t}\!AB)=\operatorname {tr} (A\,{}^{t}\!B)}
となる。ただし "tr " は行列の蹟 であり、"vec " は行列の一列化 である。この内積からフロベニウスノルム が誘導される。
クロネッカー積
二つの行列 A , B のサイズがそれぞれ m × n , p × q であるとき、これらがどのようなサイズであったとしても(サイズに関する制約条件なしに)、この二つの行列のクロネッカー積 (英 : Kronecker product )は
A
⊗
B
=
[
a
11
B
a
12
B
⋯
a
1
n
B
a
21
B
a
22
B
⋯
a
2
n
B
⋮
⋮
⋱
⋮
a
m
1
B
a
m
2
B
⋯
a
m
n
B
]
{\displaystyle A\otimes B={\begin{bmatrix}a_{11}B&a_{12}B&\cdots &a_{1n}B\\a_{21}B&a_{22}B&\cdots &a_{2n}B\\\vdots &\vdots &\ddots &\vdots \\a_{m1}B&a_{m2}B&\cdots &a_{mn}B\end{bmatrix}}}
で与えられるサイズ mp × nq の行列である[8] 。これはより一般のテンソル積 を行列に対して適用したものになっている。
R.G. Lerner, G.L. Trigg (1991). Encyclopaedia of Physics (2nd ed.). VHC publishers. ISBN 3-527-26954-1 C.B. Parker (1994). McGraw Hill Encyclopaedia of Physics (2nd ed.). ISBN 0-07-051400-3 S. Lipschutz, M. Lipson (2009). Linear Algebra . Schaum's Outlines (4th ed.). McGraw Hill (USA). pp. 30–31. ISBN 978-0-07-154352-1 K.F. Riley, M.P. Hobson, S.J. Bence (2010). Mathematical methods for physics and engineering . Cambridge University Press. ISBN 978-0-521-86153-3 R. A. Adams (1995). Calculus, A Complete Course (3rd ed.). Addison Wesley. p. 627. ISBN 0 201 82823 5 Horn, Johnson (2013). Matrix Analysis (2nd ed.). Cambridge University Press. p. 6. ISBN 978 0 521 54823 6 (Horn & Johnson 1985 , Ch. 5)
Henry Cohn, Robert Kleinberg , Balazs Szegedy, and Chris Umans. Group-theoretic Algorithms for Matrix Multiplication. arXiv :math.GR/0511460 . Proceedings of the 46th Annual Symposium on Foundations of Computer Science , 23–25 October 2005, Pittsburgh, PA, IEEE Computer Society, pp. 379–388.
Henry Cohn, Chris Umans. A Group-theoretic Approach to Fast Matrix Multiplication. arXiv :math.GR/0307321 . Proceedings of the 44th Annual IEEE Symposium on Foundations of Computer Science , 11–14 October 2003, Cambridge, MA, IEEE Computer Society, pp. 438–449.
Coppersmith, D., Winograd S., Matrix multiplication via arithmetic progressions , J. Symbolic Comput. 9, p. 251-280, 1990.
Horn, Roger A.; Johnson, Charles R. (1991), Topics in Matrix Analysis , Cambridge University Press , ISBN 978-0-521-46713-1
Knuth, D.E. , The Art of Computer Programming Volume 2: Seminumerical Algorithms . Addison-Wesley Professional; 3 edition (November 14, 1997). ISBN 978-0-201-89684-8 . pp. 501.
Press, William H.; Flannery, Brian P.; Teukolsky, Saul A. ; Vetterling, William T. (2007), Numerical Recipes: The Art of Scientific Computing (3rd ed.), Cambridge University Press , ISBN 978-0-521-88068-8 .
Ran Raz . On the complexity of matrix product. In Proceedings of the thirty-fourth annual ACM symposium on Theory of computing. ACM Press, 2002. doi :10.1145/509907.509932 .
Robinson, Sara, Toward an Optimal Algorithm for Matrix Multiplication, SIAM News 38(9), November 2005. PDF
Strassen, Volker, Gaussian Elimination is not Optimal , Numer. Math. 13, p. 354-356, 1969.
Styan, George P. H. (1973), “Hadamard Products and Multivariate Statistical Analysis”, Linear Algebra and its Applications 6 : 217–240, doi :10.1016/0024-3795(73)90023-2
Vassilevska Williams, Virginia, Multiplying matrices faster than Coppersmith-Winograd , Manuscript, May 2012. PDF
ウィキメディア・コモンズには、
行列の乗法 に関連するカテゴリがあります。