从基变换视角理解矩阵乘法
从基变换视角理解矩阵乘法
矩阵乘法是线性代数中的一个核心概念,但其计算规则往往让初学者感到困惑。本文将通过基变换的视角,帮助读者深入理解矩阵乘法的意义。
刚接触线性代数时,很多人可能都会对矩阵乘法的计算规则感到困惑:为什么规则定义得看起来那么有规律却又让人难以理解?现在,让我们参考一些资料,重新总结一下对矩阵乘法的理解(严格来说是点乘)。
要理解矩阵和矩阵的乘法,可以先从矩阵和向量的乘法开始,因为矩阵可以看成是不同列向量的集合。
基变换视角下的矩阵乘法
下面从基变换视角理解矩阵的乘法原理,基变换视角是将矩阵的每个列向量看成是新基坐标系中的一个基坐标。
先考虑一个规则的 2x2 的矩阵和一个 2x1 的向量之间的乘法,例如:
[
\begin{bmatrix}
1 & -2 \
1 & 2
\end{bmatrix}
\begin{bmatrix}
1 \
1
\end{bmatrix}
\begin{bmatrix}
-1 \
3
\end{bmatrix}
]
为了方便描述,分别用A表示矩阵,a表示等号左边的向量(1, 1),b表示等号右边的向量(-1, 3)。
上面这个乘法过程可以理解为:把矩阵A看成一个新的基坐标系,(1, 1) 和 (-2, 2) 分别是新基坐标系中的x轴和y轴。向量b(1, 1)可以看成是这个新基坐标系视角下坐标表示的一个向量,左边乘上一个矩阵A,相当于求出在以矩阵A为新的基坐标系的视角下,向量(1, 1)在标准的笛卡尔坐标系中的坐标表示。
可视化理解
让我们通过可视化来更好地理解这个计算过程:
import numpy as np
import matplotlib.pyplot as plt
# 定义矩阵和向量
A = np.array([[1, -2], [1, 2]])
b = np.array([1, 1])
# 计算变换后的向量
b_transformed = A @ b
# 定义标准基
origin = np.array([[0, 0], [0, 0]])
# 绘制
fig, ax = plt.subplots()
# 绘制原始向量
ax.quiver(*origin, b[0], b[1], angles='xy', scale_units='xy', scale=1, color='blue', label='Original Vector (1,1)')
# 绘制新基
ax.quiver(*origin, A[0, 0], A[1, 0], angles='xy', scale_units='xy', scale=1, color='red', label='New x-axis (1,1)')
ax.quiver(*origin, A[0, 1], A[1, 1], angles='xy', scale_units='xy', scale=1, color='green', label='New y-axis (-2,2)')
# 绘制变换后的向量
ax.quiver(*origin, b_transformed[0], b_transformed[1], angles='xy', scale_units='xy', scale=1, color='purple', label='Transformed Vector (-1,3)')
# 设置图形属性
ax.set_xlim(-3, 3)
ax.set_ylim(0, 3) # 只显示x轴的上半部分
ax.set_aspect('equal')
plt.grid()
# 调整图例位置
plt.legend(loc='upper left', bbox_to_anchor=(0.6, 1), fontsize='small')
plt.title('Vector Transformation and Basis Visualization')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
从图中可以看到,红色和绿色的向量构成了一个新的坐标基底。从这个基底的视角来看,棕色的向量还是(1, 1),但是这个新基坐标系下的向量(1, 1)在原笛卡尔坐标系下的表示是(-1, 3)。
所以,从基变换的角度来看矩阵乘向量A ⋅ b,可以理解成以矩阵A为新的基底,该基底下的向量b,在笛卡尔坐标系下的真实位置。
矩阵乘法的计算规则
由此,我们可以理解矩阵乘法的计算规则,为什么就是像下面这样,前面一个矩阵的第 i 行 x 后一个矩阵的第 j 列,结果为新的矩阵的第 ij 个元素:
[
\begin{bmatrix}
1 & -2 \
1 & 2
\end{bmatrix}
\begin{bmatrix}
1 \
1
\end{bmatrix}
\begin{bmatrix}
-1 \times 1 + (-2) \times 1 \
1 \times 1 + 2 \times 1
\end{bmatrix}
\begin{bmatrix}
-1 \
3
\end{bmatrix}
]
因为左边矩阵不同的列向量代表新基坐标系中不同维度下的基底,后面矩阵列向量中的不同坐标分别表示新的基坐标系中不同维度的坐标。而新的基坐标系中,不同维度的基坐标轴的坐标表示,又可以看成是相对于原笛卡尔坐标系的投影。比如新的x轴(1, 1),表示这个轴在笛卡尔坐标系中的x, y轴上的投影分别都是1,新的x轴中的一个单位长度,等价于原笛卡尔坐标系中x, y轴各自一个单位长度。
因此,矩阵乘法之所以规定行乘列的值作为计算的结果,本质上是把新基坐标系下,一个向量所有维度的坐标,在原笛卡尔坐标系下按照不同维度(前面矩阵的行)进行了一个汇总求和。
这也解释了为什么规定矩阵乘法,要求必须前面一个矩阵的列数等于后一个矩阵的行数。因为前面矩阵的列数其实就是新的基坐标系的维度,后面矩阵的行数,其实就是一个向量在这个新基坐标系中各维度下的坐标表示,二者维度不同,也就没有汇总的必要和意义。
推广到高维矩阵
推广到高维的不规则的矩阵,比如一个3x2的矩阵乘上一个2x1的向量,新的基坐标系还是只有两个维度,只不过每个维度会投影到一个三维的笛卡尔坐标系(因为矩阵的列向量是用3个数表示,说明在笛卡尔坐标系中有3个维度的投影)。后面这个2x1的向量可以看成是新的基坐标系下的向量表示,最终的计算还是将这个向量分别在笛卡尔坐标系的三个维度上汇总求和。
以下面这个为例:
[
\begin{bmatrix}
0 & 1 \
1 & 0 \
1 & 1
\end{bmatrix}
\cdot
\begin{bmatrix}
1 \
1
\end{bmatrix}
\begin{bmatrix}
1 \
1 \
2
\end{bmatrix}
]
至于推广到更多行或列的矩阵乘法,无非是增加行数来增加新的基坐标在标准笛卡尔坐标系下的分解维度,或者增加列数来增加新坐标系的基底数量,原理都还是一样的。
矩阵乘矩阵
至于矩阵乘矩阵,可以把后一个矩阵看成是多个列向量的集合,用矩阵乘向量的视角去理解。
通过本文的讲解,希望读者能够对矩阵乘法有更深入的理解。矩阵乘法不仅仅是简单的数字运算,更是一种空间变换的工具,通过基变换的视角,我们可以更直观地理解其背后的数学意义。