【线性代数】 抽丝剥茧系列之多角度理解矩阵乘法

时间:2022-10-25 14:57:46

引言

线性代数可以说是噩梦,今天一位巨佬说学习线性代数就是从抽象入门再到具体,最后再回归抽象的过程,所以我决定再失败一次。

今天的例子,对于矩阵乘法比如下式:

$\begin{bmatrix} \ 1 & 2 \ \ 2 & 0 \ \ 4 & 3 \end{bmatrix}$ $\begin{bmatrix} \ 1 & 3 & 2\ \ 2 & 4 & 1
\end{bmatrix}$= $\begin{bmatrix} \ 5 & 11&3 \ \ 2 & 6&2 \ 10 &24&7\ \end{bmatrix}$

​ $(A)$       $(B)$       $(C)$

它可以用四种理解方式来理解:单元素乘积表示列向量表示行向量表示以及行列乘积表示

正文

1. 单元素乘积表示

对于C矩阵中的第二行第二列元素$C_{22}$而言:

$C_{22} = A_{21}*B_{12} + A_{22}*B_{22}$

也就C当中(2,1)的元素其实对应的是A中的(2,1)B中的(1,2)相乘

这可以帮助我们理解矩阵元素的拆解

2. 行向量表示

可以将C矩阵用看作是A矩阵的行向量线性表示:

$\begin{bmatrix} \ \dots & \dots \ \ 2 & 0 \ \ \dots & \dots & \end{bmatrix}$ $\begin{bmatrix} \ 1 & 3 & 2\ \ 2 & 4 & 1
\end{bmatrix}$ = $\begin{bmatrix} \ & \cdots& \ \ 2 & 6&2 \ \ & \cdots &\ \end{bmatrix}$

​ $(A_{2i}(i=1,2))$    $(B)$       $(C)$

矩阵A第2行元素和矩阵B相乘后会得到C矩阵当中的第2行元素,即C矩阵可以由A矩阵的行向量线性表出(示)

这可以帮助我们理解矩阵的横向拆解

3. 列向量表示

同理,也可以将C矩阵用看作是B矩阵的列向量的线性表示:

$\begin{bmatrix} \ 1 & 2 \ \ 2 & 0 \ \ 4 & 3 \end{bmatrix}$ $\begin{bmatrix} \ \vdots & 3 & \vdots\ \ \vdots & 4 & \vdots
\end{bmatrix}$ = $\begin{bmatrix} \ & 11 & \ \ \vdots & 6&\vdots \ \ & 24 &\ \end{bmatrix}$

​ $(A)$    $(B_{j2}(j=1,2))$   $(C)$

矩阵A矩阵B第2列元素相乘后会得到C矩阵当中的第2列元素,即C矩阵可以由B矩阵的列向量线性表出(示)

这可以帮助我们理解矩阵的纵向拆解

4. 行列乘积表示

最重要的莫过于结合行列来理解矩阵乘法,结合上面的知识, $3\times2$ 的 A矩阵可以被拆解为一个3维列向量和一个2维行向量相乘,同理,矩阵B可以被理解为一个2维行向量和一个3维列向量相乘,对应的,C可以被理解为一个3维行向量和一个3维列向量相乘

原式可以被理解为:

$\begin{bmatrix} \ 1 & 2 \ \ 2 & 0 \ \ 4 & 3 \end{bmatrix}$ $\begin{bmatrix} \ 1 & 3 & 2\ \ 2 & 4 & 1
\end{bmatrix}$= $\begin{bmatrix} \ 5 & 11&3 \ \ 2 & 6&2 \ 10 &24&7\ \end{bmatrix}$ $\Longrightarrow$ $\begin{bmatrix}\alpha_1\\alpha_2\\alpha_3\\end{bmatrix}$$\begin{bmatrix}\beta_1\beta_2\beta_3\\end{bmatrix}= C$

​ $(A)$     $(B)$        $(C)$

可以看到此时C矩阵通过另外的方式被表示出来了,更为简单和直观。

这可以帮助我们理解矩阵的分解

附录: python实现矩阵相乘

矩阵相乘可以使用numpy当中的dot方法,它可以完成向量内积的计算和矩阵相乘

import numpy as np

A = np.array([[1,2],[2,0],[4,3]])
B = np.array([[1,3,1],[2,4,1]])

print(np.dot(A, B))
  • 输出结果
>>> [[ 5 11  3]
>>> [ 2  6  2]
>>> [10 24  7]]