【线性代数】理解矩阵乘法的意义(点乘)

刚接触线性代数时,很不理解矩阵乘法的计算规则,为什么规则定义的看起来那么有规律却又莫名其妙,现在参考了一些资料,回过头重新总结下个人对矩阵乘法的理解(严格来说是点乘)。

理解矩阵和矩阵的乘法,可以先理解矩阵和向量的乘法,因为矩阵可以看成是不同列向量的集合。

下面从基变换视角理解矩阵的乘法原理,基变换视角是将矩阵的每个列向量看成是新基坐标系中的一个基坐标。

先考虑一个规则的 2x2 的矩阵和一个 2x1 的向量之间的乘法,例如:
[ 1 − 2 1 2 ] [ 1 1 ] = [ − 1 3 ] \begin{bmatrix} 1&-2 \\ 1&2 \end{bmatrix} \begin{bmatrix} 1\\ 1 \end{bmatrix} = \begin{bmatrix} -1\\ 3 \end{bmatrix} [11−22][11]=[−13]

后面为了方便描述,分别用A表示矩阵,a表示等号左边的向量(1, 1),b表示等号右边的向量(-1, 3)。

上面这个乘法过程可以理解为:把矩阵A看成一个新的基坐标系,(1, 1) 和 (-2, 2) 分别是新基坐标系中的x, y轴。b(1, 1)可以看成是这个新基坐标系视角下坐标表示的一个向量,左边乘上一个矩阵A,相当于求出在以矩阵A为新的基坐标系的视角下,向量(1, 1)在标准的笛卡尔坐标系中的坐标表示。

可视化上面这个计算:

py 复制代码
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 \cdot b A⋅b,可以理解成以矩阵A为新的基底,该基底下的向量b,在笛卡尔坐标系下的真实位置。

由此理解矩阵乘法的计算规则,为什么就是像下面这样,前面一个矩阵的第 i 行 x 后一个矩阵的第 j 列,结果为新的矩阵的第 ij 个元素:
[ 1 − 2 1 2 ] [ 1 1 ] = [ − 1 × 1 + ( − 2 ) × 1 1 × 1 + 2 × 1 ] = [ − 1 3 ] \begin{bmatrix} 1&-2 \\ 1&2 \end{bmatrix} \begin{bmatrix} 1\\ 1 \end{bmatrix} = \begin{bmatrix} -1\times1+(-2)\times1\\ 1\times1+2\times1 \end{bmatrix}= \begin{bmatrix} -1\\ 3 \end{bmatrix} [11−22][11]=[−1×1+(−2)×11×1+2×1]=[−13]

因为左边矩阵不同的列向量代表新基坐标系中不同维度下的基底,后面矩阵列向量中的不同坐标分别表示新的基坐标系中不同维度的坐标,而新的基坐标系中,不同维度的基坐标轴的坐标表示,又可以看成是相对于原笛卡尔坐标系的投影,比如新的x轴(1, 1),表示这个轴在笛卡尔坐标系中的x, y轴上的投影分别都是1,新的x轴中的一个单位长度,等价于原笛卡尔坐标系中x, y轴各自一个单位长度。

因此矩阵乘法之所以规定行乘列的值作为计算的结果,本质上是把新基坐标系下,一个向量所有维度的坐标,在原笛卡尔坐标系下按照不同维度(前面矩阵的行)进行了一个汇总求和。

所以也能理解为什么规定矩阵乘法,要求必须前面一个矩阵的列数等于后一个矩阵的行数,因为前面矩阵的列数其实就是新的基坐标系的维度,后面矩阵的行数,其实就是一个向量在这个新基坐标系中各维度下的坐标表示,二者维度不同,也就没有汇总的必要和意义。

推广到高维的不规则的矩阵,比如一个3x2的矩阵乘上一个2x1的向量,新的基坐标系还是只有两个维度,只不过每个维度会投影到一个三维的笛卡尔坐标系(因为矩阵的列向量是用3个数表示,说明在笛卡尔坐标系中有3个维度的投影)。后面这个2x1的向量可以看成是新的基坐标系下的向量表示,最终的计算还是将这个向量分别在笛卡尔坐标系的三个维度上汇总求和。

以下面这个为例:

[ 0 1 1 0 1 1 ] ⋅ [ 1 1 ] = [ 1 1 2 ] \begin{bmatrix} 0 & 1\\ 1 & 0\\ 1 & 1 \end{bmatrix} \cdot \begin{bmatrix} 1\\ 1 \end{bmatrix}= \begin{bmatrix} 1\\ 1\\ 2 \end{bmatrix} 011101 ⋅[11]= 112

至于推广到更多行或列的矩阵乘法,无非增加行数是增加了新的基坐标在标准笛卡尔坐标系下的分解维度,增加列数是增加了新坐标系的基底数量,原理都还是一样的。

至于矩阵乘矩阵,可以把后一个矩阵看成是多个列向量的集合,用矩阵乘向量的视角去理解。

相关推荐
焦糖码奇朵、2 小时前
Matlab:矩阵运算篇——矩阵
算法·matlab·矩阵·信息与通信
点云SLAM2 小时前
C++ 平面拟合原理和最小法实现示例
c++·线性代数·平面·最小二乘法·平面拟合·pca算法
WBingJ4 小时前
深度学习基础:线性代数本质2——线性组合、张成的空间与基
人工智能·深度学习·线性代数
zjoy_22331 天前
【Latex】latex公式手册大全||积分公式表示||极限表达||矩阵的各种表达
python·学习·线性代数·数学·矩阵·latex·高等数学
BineHello1 天前
MPC用优化求解器 - 解决无人机轨迹跟踪
算法·矩阵·自动驾驶·动态规划·无人机
惆怅客1231 天前
三维仿射变换矩阵
矩阵·旋转·仿射变换·缩放·平移
向光.1 天前
⭐LeetCode(数学分类) 48. 旋转图像——优美的数学法转圈(原地修改)⭐
数学·算法·leetcode·矩阵
花间流风2 天前
晏殊几何学讲义
算法·矩阵·几何学·情感分析
焦糖码奇朵、2 天前
Matlab:矩阵运算篇——矩阵数学运算
人工智能·matlab·矩阵·信息与通信
从入门-到精通2 天前
线性代数在机器学习中的理论与实践
人工智能·深度学习·神经网络·线性代数·决策树·机器学习·计算机视觉