第二讲:基础数学工具回顾
说实话,每次带新人做决策算法仿真,我都要先问一句:「你数学底子怎么样?」
不是我要刁难人。而是我踩过太多坑了——明明算法逻辑没问题,结果跑出来一团糟,最后发现是向量运算写错了。所以这一讲,咱们把基础打牢。
向量与矩阵:算法的「砖瓦」
决策算法里,数据很少是单个数字。它通常是一堆数字打包在一起。这就是向量和矩阵的用武之地。
向量,说白了就是一列数。比如一个机器人的位置 (x, y, z),就是一个三维向量。
矩阵,就是多排多列的数。比如多个机器人的位置,就可以排成一个矩阵。
我习惯把矩阵想象成一个「表格」。每一行是一个样本,每一列是一个特征。这样理解起来特别顺。
核心运算
- 加法:对应位置相加。维度必须相同。
- 数乘:每个元素乘以同一个数。
- 点积:两个向量对应位置相乘再求和。这个在计算相似度时特别常用。
- 矩阵乘法:行乘列。注意维度匹配——前一个的列数必须等于后一个的行数。
重点提醒:矩阵乘法不满足交换律。A×B 和 B×A 通常不一样。我见过有人在这上面栽跟头,调试了一整天。
概率论基础:不确定性的「语言」
决策算法面对的世界,从来不是确定的。传感器有噪声,环境在变化。概率论就是描述这种不确定性的工具。
随机变量
你可以把随机变量理解成一个「会变的数」。比如明天测得的温度,就是一个随机变量。
它有两种类型:
- 离散型:取值有限,比如掷骰子的点数。
- 连续型:取值连续,比如人的身高。
期望
期望就是「平均下来会是多少」。我经常用它来评估一个决策的「平均表现」。
公式很简单:每个可能的值乘以它出现的概率,然后求和。
我的经验:期望不代表一定会发生。它只是一个参考值。我在做路径规划时,经常用期望来比较不同路线的「平均耗时」。
方差
方差衡量的是「波动大小」。方差大,说明数据很分散;方差小,说明数据很集中。
举个例子:两个传感器测同一个距离。一个每次误差都在 1cm 以内,另一个有时偏 5cm。后者的方差就大得多。
避坑指南:我曾经只关注期望,忽略了方差。结果算法在「平均情况」下表现很好,但遇到极端情况就崩了。记住:决策不仅要看平均,还要看风险。
用 NumPy 实现基础运算
理论说完了,咱们上手。NumPy 是 Python 里做数值计算的核心库。我几乎每天都在用。
创建向量和矩阵
import numpy as np
# 创建向量
v = np.array([1, 2, 3])
# 创建矩阵
M = np.array([[1, 2], [3, 4], [5, 6]])
# 特殊矩阵
zeros = np.zeros((3, 3)) # 全零矩阵
ones = np.ones((2, 4)) # 全一矩阵
eye = np.eye(3) # 单位矩阵
向量运算
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 加法
c = a + b # [5, 7, 9]
# 数乘
d = 2 * a # [2, 4, 6]
# 点积
dot = np.dot(a, b) # 32
# 范数(长度)
norm = np.linalg.norm(a) # sqrt(14)
矩阵运算
A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
# 矩阵乘法
C = np.dot(A, B) # 或者 A @ B
# 转置
A_T = A.T
# 求逆(如果可逆)
A_inv = np.linalg.inv(A)
概率统计
# 生成随机数
samples = np.random.randn(1000) # 1000个标准正态分布样本
# 计算期望和方差
mean = np.mean(samples)
var = np.var(samples)
# 直方图(用于估计概率分布)
hist, bins = np.histogram(samples, bins=30)
小技巧:用 np.random.seed(42) 固定随机种子。这样每次运行结果都一样,方便调试。我每次写仿真代码,第一行就是这个。
知识体系总览
下面这张图,把这一讲的核心逻辑串起来了。你可以把它当作一个「思维导图」来用。
嗯,这一讲的内容就这些。向量矩阵是「骨架」,概率论是「血肉」,NumPy 是「工具」。三者缺一不可。
你想想看,如果连向量乘法都搞错,后面仿真出来的结果你敢信吗?所以别嫌基础,多练练手。