矩陣乘法

数学中，矩阵乘法（英語：matrix multiplication）是一种根据两个矩阵得到第三个矩阵的二元运算，第三个矩阵即前两者的乘积，称为矩阵积（英語：matrix product）。设 A {\displaystyle A} 是 n × m {\displaystyle n\times m} 的矩阵， B {\displaystyle B} 是 m × p {\displaystyle m\times p} 的矩阵，则它们的矩阵积 A B {\displaystyle AB} 是 n × p {\displaystyle n\times p} 的矩阵。 A {\displaystyle A} 中每一行的 m {\displaystyle m} 个元素都与 B {\displaystyle B} 中对应列的 m {\displaystyle m} 个元素对应相乘，这些乘积的和就是 A B {\displaystyle AB} 中的一个元素。 矩阵可以用来表示线性映射，矩阵积则可以用来表示线性映射的复合。因此，矩阵乘法是线性代数的基础工具，不仅在数学中有大量应用，在应用数学、物理学、工程学等领域也有广泛使用。 矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列数（column，台湾作行數）和第二個矩陣的行数（row，台湾作列數）相同時才有定義。一般單指矩陣乘積時，指的便是一般矩陣乘積。若 A {\displaystyle A} 為 m × n {\displaystyle m\times n} 矩陣， B {\displaystyle B} 為 n × p {\displaystyle n\times p} 矩陣，則他們的乘積 A B {\displaystyle AB} (有時記做 A ⋅ B {\displaystyle A\cdot B} ）會是一個 m × p {\displaystyle m\times p} 矩陣。其乘積矩陣的元素如下面式子得出： ( A B ) i j = ∑ r = 1 n a i r b r j = a i 1 b 1 j + a i 2 b 2 j + ⋯ + a i n b n j {\displaystyle (AB)_{ij}=\sum _{r=1}^{n}a_{ir}b_{rj}=a_{i1}b_{1j}+a_{i2}b_{2j}+\cdots +a_{in}b_{nj}} 以上是用矩陣單元的代數系統來說明這類乘法的抽象性質。本節以下各種運算法都是這個公式的不同角度理解，運算結果相等： 左邊的圖表示出要如何計算 A B {\displaystyle AB} 的 ( 1 , 2 ) {\displaystyle (1,2)} 和 ( 3 , 3 ) {\displaystyle (3,3)} 元素，當 A {\displaystyle A} 是個 4 × 2 {\displaystyle 4\times 2} 矩陣和B是個 2 × 3 {\displaystyle 2\times 3} 矩陣時。分別來自兩個矩陣的元素都依箭頭方向而兩兩配對，把每一對中的兩個元素相乘，再把這些乘積加總起來，最後得到的值即為箭頭相交位置的值。 ( A B ) 1 , 2 = ∑ r = 1 2 a 1 , r b r , 2 = a 1 , 1 b 1 , 2 + a 1 , 2 b 2 , 2 {\displaystyle (AB)_{1,2}=\sum _{r=1}^{2}a_{1,r}b_{r,2}=a_{1,1}b_{1,2}+a_{1,2}b_{2,2}} ( A B ) 3 , 3 = ∑ r = 1 2 a 3 , r b r , 3 = a 3 , 1 b 1 , 3 + a 3 , 2 b 2 , 3 {\displaystyle (AB)_{3,3}=\sum _{r=1}^{2}a_{3,r}b_{r,3}=a_{3,1}b_{1,3}+a_{3,2}b_{2,3}} 這種矩陣乘積亦可由稍微不同的觀點來思考：把向量和各係數相乘後相加起來。設 A {\displaystyle \mathbf {A} } 和 B {\displaystyle \mathbf {B} } 是兩個給定如下的矩陣： A = [ a 1 , 1 a 1 , 2 … a 2 , 1 a 2 , 2 … ⋮ ⋮ ⋱ ] = [ A 1 A 2 … ] , {\displaystyle \mathbf {A} ={\begin{bmatrix}a_{1,1}&a_{1,2}&\dots \\a_{2,1}&a_{2,2}&\dots \\\vdots &\vdots &\ddots \end{bmatrix}}={\begin{bmatrix}A_{1}&A_{2}&\dots \end{bmatrix}},} B = [ b 1 , 1 b 1 , 2 … b 2 , 1 b 2 , 2 … ⋮ ⋮ ⋱ ] = [ B 1 B 2 ⋮ ] {\displaystyle \mathbf {B} ={\begin{bmatrix}b_{1,1}&b_{1,2}&\dots \\b_{2,1}&b_{2,2}&\dots \\\vdots &\vdots &\ddots \end{bmatrix}}={\begin{bmatrix}B_{1}\\B_{2}\\\vdots \end{bmatrix}}} 其中 A 1 {\displaystyle A_{1}} 是由所有 a x , 1 {\displaystyle a_{x,1}} 元素所组成的向量(column)， A 2 {\displaystyle A_{2}} 是由所有 a x , 2 {\displaystyle a_{x,2}} 元素所组成的向量，以此类推。 B 1 {\displaystyle B_{1}} 是由所有 b 1 , x {\displaystyle b_{1,x}} 元素所组成的向量(row)， B 2 {\displaystyle B_{2}} 是由所有 b 2 , x {\displaystyle b_{2,x}} 元素所组成的向量，以此类推。 則 A B = [ a 1 , 1 [ b 1 , 1 b 1 , 2 … ] + a 1 , 2 [ b 2 , 1 b 2 , 2 … ] + ⋯ a 2 , 1 [ b 1 , 1 b 1 , 2 … ] + a 2 , 2 [ b 2 , 1 b 2 , 2 … ] + ⋯ ⋮ ] = A 1 B 1 + A 2 B 2 + … {\displaystyle \mathbf {AB} ={\begin{bmatrix}a_{1,1}{\begin{bmatrix}b_{1,1}&b_{1,2}&\dots \end{bmatrix}}+a_{1,2}{\begin{bmatrix}b_{2,1}&b_{2,2}&\dots \end{bmatrix}}+\cdots \\\\a_{2,1}{\begin{bmatrix}b_{1,1}&b_{1,2}&\dots \end{bmatrix}}+a_{2,2}{\begin{bmatrix}b_{2,1}&b_{2,2}&\dots \end{bmatrix}}+\cdots \\\vdots \end{bmatrix}}=A_{1}B_{1}+A_{2}B_{2}+\dots } 舉個例子來說： [ 1 0 2 − 1 3 1 ] ⋅ [ 3 1 2 1 1 0 ] = [ 1 [ 3 1 ] + 0 [ 2 1 ] + 2 [ 1 0 ] − 1 [ 3 1 ] + 3 [ 2 1 ] + 1 [ 1 0 ] ] = [ [ 3 1 ] + [ 0 0 ] + [ 2 0 ] [ − 3 − 1 ] + [ 6 3 ] + [ 1 0 ] ] {\displaystyle {\begin{bmatrix}1&0&2\\-1&3&1\end{bmatrix}}\cdot {\begin{bmatrix}3&1\\2&1\\1&0\end{bmatrix}}={\begin{bmatrix}1{\begin{bmatrix}3&1\end{bmatrix}}+0{\begin{bmatrix}2&1\end{bmatrix}}+2{\begin{bmatrix}1&0\end{bmatrix}}\\-1{\begin{bmatrix}3&1\end{bmatrix}}+3{\begin{bmatrix}2&1\end{bmatrix}}+1{\begin{bmatrix}1&0\end{bmatrix}}\end{bmatrix}}={\begin{bmatrix}{\begin{bmatrix}3&1\end{bmatrix}}+{\begin{bmatrix}0&0\end{bmatrix}}+{\begin{bmatrix}2&0\end{bmatrix}}\\{\begin{bmatrix}-3&-1\end{bmatrix}}+{\begin{bmatrix}6&3\end{bmatrix}}+{\begin{bmatrix}1&0\end{bmatrix}}\end{bmatrix}}} = [ 5 1 4 2 ] {\displaystyle ={\begin{bmatrix}5&1\\4&2\end{bmatrix}}} 左面矩陣的列為為係數表，右邊矩陣為向量表。例如，第一行是[1 0 2]，因此將1乘上第一個向量，0乘上第二個向量，2則乘上第三個向量。 一般矩陣乘積也可以想為是行向量和列向量的內積。若 A {\displaystyle \mathbf {A} } 和 B {\displaystyle \mathbf {B} } 為給定如下的矩陣： A = [ a 1 , 1 a 1 , 2 a 1 , 3 … a 2 , 1 a 2 , 2 a 2 , 3 … a 3 , 1 a 3 , 2 a 3 , 3 … ⋮ ⋮ ⋮ ⋱ ] = [ A 1 A 2 A 3 ⋮ ] {\displaystyle \mathbf {A} ={\begin{bmatrix}a_{1,1}&a_{1,2}&a_{1,3}&\dots \\a_{2,1}&a_{2,2}&a_{2,3}&\dots \\a_{3,1}&a_{3,2}&a_{3,3}&\dots \\\vdots &\vdots &\vdots &\ddots \end{bmatrix}}={\begin{bmatrix}A_{1}\\A_{2}\\A_{3}\\\vdots \end{bmatrix}}} 且 B = [ b 1 , 1 b 1 , 2 b 1 , 3 … b 2 , 1 b 2 , 2 b 2 , 3 … b 3 , 1 b 3 , 2 b 3 , 3 … ⋮ ⋮ ⋮ ⋱ ] = [ B 1 B 2 B 3 … ] {\displaystyle \mathbf {B} ={\begin{bmatrix}b_{1,1}&b_{1,2}&b_{1,3}&\dots \\b_{2,1}&b_{2,2}&b_{2,3}&\dots \\b_{3,1}&b_{3,2}&b_{3,3}&\dots \\\vdots &\vdots &\vdots &\ddots \end{bmatrix}}={\begin{bmatrix}B_{1}&B_{2}&B_{3}&\dots \end{bmatrix}}} 其中，这里 A 1 {\displaystyle A_{1}} 是由所有 a 1 , x {\displaystyle a_{1,x}} 元素所組成的向量， A 2 {\displaystyle A_{2}} 是由所有 a 2 , x {\displaystyle a_{2,x}} 元素所組成的向量，以此類推。 B 1 {\displaystyle B_{1}} 是由所有 b x , 1 {\displaystyle b_{x,1}} 元素所組成的向量， B 2 {\displaystyle B_{2}} 是由所有 b x , 2 {\displaystyle b_{x,2}} 元素所組成的向量，以此類推。 则 A B = [ A 1 A 2 A 3 ⋮ ] × [ B 1 B 2 B 3 … ] = [ ( A 1 ⋅ B 1 ) ( A 1 ⋅ B 2 ) ( A 1 ⋅ B 3 ) … ( A 2 ⋅ B 1 ) ( A 2 ⋅ B 2 ) ( A 2 ⋅ B 3 ) … ( A 3 ⋅ B 1 ) ( A 3 ⋅ B 2 ) ( A 3 ⋅ B 3 ) … ⋮ ⋮ ⋮ ⋱ ] {\displaystyle \mathbf {AB} ={\begin{bmatrix}A_{1}\\A_{2}\\A_{3}\\\vdots \end{bmatrix}}\times {\begin{bmatrix}B_{1}&B_{2}&B_{3}&\dots \end{bmatrix}}={\begin{bmatrix}(A_{1}\cdot B_{1})&(A_{1}\cdot B_{2})&(A_{1}\cdot B_{3})&\dots \\(A_{2}\cdot B_{1})&(A_{2}\cdot B_{2})&(A_{2}\cdot B_{3})&\dots \\(A_{3}\cdot B_{1})&(A_{3}\cdot B_{2})&(A_{3}\cdot B_{3})&\dots \\\vdots &\vdots &\vdots &\ddots \end{bmatrix}}} 即 ( A B ) i j = A i B j {\displaystyle \left(\mathbf {AB} \right)_{ij}=A_{i}B_{j}} 矩陣乘法是不可交換的（即 A B ≠ B A {\displaystyle AB\neq BA} ），除了一些較特別的情況。很清楚可以知道，不可能預期說在改變向量的部份後還能得到相同的結果，而且第一個矩陣的列數必須要和第二個矩陣的行數相同，也可以看出為什麼矩陣相乘的順序會影響其結果。 雖然矩陣乘法是不可交換的，但 A B {\displaystyle AB} 和 B A {\displaystyle BA} 的行列式總會是一樣的（當 A {\displaystyle A} 、 B {\displaystyle B} 是同樣大小的方陣時）。其解釋在行列式條目內。 當 A {\displaystyle A} 、 B {\displaystyle B} 可以被解釋為線性算子，其矩陣乘積 A B {\displaystyle AB} 會對應為兩個線性算子的複合函數，其中B先作用。 [ 1 0 2 − 1 3 1 ] ⋅ [ 3 1 2 1 1 0 ] = [ 5 1 4 2 ] {\displaystyle {\begin{bmatrix}1&0&2\\-1&3&1\end{bmatrix}}\cdot {\begin{bmatrix}3&1\\2&1\\1&0\end{bmatrix}}={\begin{bmatrix}5&1\\4&2\end{bmatrix}}} 以 Google Sheet 為例，選取儲存格範圍或者使用陣列，在儲存格輸入 =MMULT({1,0,2;-1,3,1},{3,1;2,1;1,0}) 在某些試算表軟體中必須必須按Ctrl+⇧ Shift+↵ Enter 將儲存格內的變數轉換為陣列 矩陣 A = ( a i j ) {\displaystyle A=(a_{ij})} 和純量 r {\displaystyle r} 的純量乘積 r A {\displaystyle rA} 的矩陣大小和 A {\displaystyle A} 一樣， r A {\displaystyle rA} 的各元素定義如下： ( r A ) i j = r ⋅ a i j   {\displaystyle (rA)_{ij}=r\cdot a_{ij}\ } 若我們考慮於一個環的矩陣時，上述的乘積有時會稱做左乘積，而右乘積的則定義為 ( A r ) i j = a i j ⋅ r   {\displaystyle (Ar)_{ij}=a_{ij}\cdot r\ } 當環是可交換時，例如實數體或複數體，這兩個乘積是相同的。但無論如何，若環是不可交換的話，如四元數，他們可能會是不同的。例如， i [ i 0 0 j ] = [ − 1 0 0 k ] ≠ [ − 1 0 0 − k ] = [ i 0 0 j ] i {\displaystyle i{\begin{bmatrix}i&0\\0&j\\\end{bmatrix}}={\begin{bmatrix}-1&0\\0&k\\\end{bmatrix}}\neq {\begin{bmatrix}-1&0\\0&-k\\\end{bmatrix}}={\begin{bmatrix}i&0\\0&j\\\end{bmatrix}}i} 給定兩個相同維度的矩陣可計算有阿達馬乘積（Hadamard product），或稱做逐項乘積、分素乘積（element-wise product, entrywise product）。兩個 m × n {\displaystyle m\times n} 矩陣 A {\displaystyle A} 、 B {\displaystyle B} 的阿達馬乘積標記為 A ∘ B {\displaystyle A\circ B} ，定義為 ( A ∘ B ) i j = a i j b i j {\displaystyle (A\circ B)_{ij}=a_{ij}b_{ij}} 的 m × n {\displaystyle m\times n} 矩陣。例如， [ 1 3 2 1 0 0 1 2 2 ] ∘ [ 0 0 2 7 5 0 2 1 1 ] = [ 1 ⋅ 0 3 ⋅ 0 2 ⋅ 2 1 ⋅ 7 0 ⋅ 5 0 ⋅ 0 1 ⋅ 2 2 ⋅ 1 2 ⋅ 1 ] = [ 0 0 4 7 0 0 2 2 2 ] {\displaystyle {\begin{bmatrix}1&3&2\\1&0&0\\1&2&2\end{bmatrix}}\circ {\begin{bmatrix}0&0&2\\7&5&0\\2&1&1\end{bmatrix}}={\begin{bmatrix}1\cdot 0&3\cdot 0&2\cdot 2\\1\cdot 7&0\cdot 5&0\cdot 0\\1\cdot 2&2\cdot 1&2\cdot 1\end{bmatrix}}={\begin{bmatrix}0&0&4\\7&0&0\\2&2&2\end{bmatrix}}} 需注意的是，阿達馬乘積是克羅內克乘積的子矩陣。 給定任兩個矩陣 A {\displaystyle A} 和 B {\displaystyle B} ，可以得到兩個矩陣的直積，或稱為克羅內克乘積 A ⊗ B {\displaystyle A\otimes B} ，其定義如下 [ a 11 B a 12 B ⋯ a 1 n B ⋮ ⋮ ⋱ ⋮ a m 1 B a m 2 B ⋯ a m n B ] {\displaystyle {\begin{bmatrix}a_{11}B&a_{12}B&\cdots &a_{1n}B\\\vdots &\vdots &\ddots &\vdots \\a_{m1}B&a_{m2}B&\cdots &a_{mn}B\end{bmatrix}}} 當 A {\displaystyle A} 是一 m × n {\displaystyle m\times n} 矩陣和 B {\displaystyle B} 是一 p × r {\displaystyle p\times r} 矩陣時， A ⊗ B {\displaystyle A\otimes B} 會是一 m p × n r {\displaystyle mp\times nr} 矩陣，而且此一乘積也是不可交換的。 舉個例子， [ 1 2 3 1 ] ⊗ [ 0 3 2 1 ] = [ 1 ⋅ 0 1 ⋅ 3 2 ⋅ 0 2 ⋅ 3 1 ⋅ 2 1 ⋅ 1 2 ⋅ 2 2 ⋅ 1 3 ⋅ 0 3 ⋅ 3 1 ⋅ 0 1 ⋅ 3 3 ⋅ 2 3 ⋅ 1 1 ⋅ 2 1 ⋅ 1 ] = [ 0 3 0 6 2 1 4 2 0 9 0 3 6 3 2 1 ] {\displaystyle {\begin{bmatrix}1&2\\3&1\\\end{bmatrix}}\otimes {\begin{bmatrix}0&3\\2&1\\\end{bmatrix}}={\begin{bmatrix}1\cdot 0&1\cdot 3&2\cdot 0&2\cdot 3\\1\cdot 2&1\cdot 1&2\cdot 2&2\cdot 1\\3\cdot 0&3\cdot 3&1\cdot 0&1\cdot 3\\3\cdot 2&3\cdot 1&1\cdot 2&1\cdot 1\\\end{bmatrix}}={\begin{bmatrix}0&3&0&6\\2&1&4&2\\0&9&0&3\\6&3&2&1\end{bmatrix}}} 若 A {\displaystyle A} 和 B {\displaystyle B} 分別表示兩個線性算子 V 1 → W 1 {\displaystyle V_{1}\to W_{1}} 和 V 2 → W 2 {\displaystyle V_{2}\to W_{2}} ， A ⊗ B {\displaystyle A\otimes B} 便為其映射的張量乘積， V 1 ⊗ V 2 → W 1 ⊗ W 2 {\displaystyle V_{1}\otimes V_{2}\to W_{1}\otimes W_{2}} 上述三種乘積都符合結合律： A ( B C ) = ( A B ) C {\displaystyle A(BC)=(AB)C} 以及分配律： A ( B + C ) = A B + A C {\displaystyle A(B+C)=AB+AC} ( A + B ) C = A C + B C {\displaystyle (A+B)C=AC+BC} 而且和純量乘積相容： c ( A B ) = ( c A ) B {\displaystyle c(AB)=(cA)B} ( A c ) B = A ( c B ) {\displaystyle (Ac)B=A(cB)} ( A B ) c = A ( B c ) {\displaystyle (AB)c=A(Bc)} 注意上述三個分開的表示式只有在純量體的乘法及加法是可交換（即純量體為一可交換環）時會相同。 Strassen演算法（1969） Winograd演算法（1980） Coppersmith–Winograd演算法（1990） 邏輯矩陣 矩陣鏈乘積 逆矩陣 關係複合 BLAS 矩陣加法 矩阵微积分 WIMS Online Matrix Multiplier （页面存档备份，存于互联网档案馆） Animated Matrix Multiplication Examples (purplemath) （页面存档备份，存于互联网档案馆） Matrix Multipication in Javascript （页面存档备份，存于互联网档案馆）（works in Firefox） Lerner, R. G.; Trigg, G. L. Encyclopaedia of Physics 2nd. VHC publishers. 1991. ISBN 3-527-26954-1 （英语）.  Parker, C. B. McGraw Hill Encyclopaedia of Physics 2nd. 1994. ISBN 0-07-051400-3 （英语）.  其它参考文献包括： Strassen, Volker, Gaussian Elimination is not Optimal, Numer. Math. 13, p. 354-356, 1969. Coppersmith, D., Winograd S., Matrix multiplication via arithmetic progressions, J. Symbolic Comput. 9, p. 251-280, 1990. Horn, Roger; Johnson, Charles: "Topics in Matrix Analysis", Cambridge, 1994. Robinson, Sara, Toward an Optimal Algorithm for Matrix Multiplication, SIAM News 38(9), November 2005.