Skip to content

程序员数学 08:向量、矩阵与坐标变换 ​

向量可以表示位置、速度,也可以是一组按固定顺序排列的特征。相同长度不代表可以直接比较:两个分量的含义、单位和坐标系必须对应。

向量运算先保留几何含义 ​

位置 p=(2,1),位移 d=(3,−2),新位置为 p+d=(5,−1)。把位移乘以 2 得到 (6,−4),方向相同、长度加倍。

二维向量 v=(x,y) 的欧几里得长度为 ∥v∥=x2+y2。例如 (3,4) 的长度为 5。只有各坐标的尺度适合使用这个距离时,几何解释才合理。

如果特征是“文件大小(字节)、错误次数”,直接用欧几里得距离会让大数值维度支配结果。需要按任务选择单位转换、归一化或权重,而不是把所有数组都当作同一种几何空间。

点积衡量方向关系 ​

u⋅v=∑iuivi,cos⁡θ=u⋅v∥u∥∥v∥.

设 u=(1,0),v=(1,1),点积为 1,长度分别为 1 和 2,余弦值为 1/2。若点积为 0 且向量非零,表示正交。

余弦公式要求两个向量都非零。向量全为 0 时,分母为 0,应定义业务处理方式,而不是让 NaN 混进排序。余弦比较关注方向,无法替代对大小本身有意义的比较。

矩阵表示线性变换 ​

采用列向量约定,矩阵

A=[2101]

把 (x,y) 映射为 (2x+y,y)。对 (2,1),结果为 (5,1)。

js
const matrix = [[2, 1], [0, 1]];
const point = [2, 1];
const transformed = matrix.map(row => row[0] * point[0] + row[1] * point[1]);
console.log(transformed); // [5, 1]

一般地,m×n 矩阵乘以 n 维列向量得到 m 维列向量。写矩阵乘法前先检查内侧维度是否一致。

变换顺序通常不能交换 ​

设 S 把横坐标放大两倍,R 把平面逆时针旋转 90°。点 (1,0) 先经 S 再经 R 得到 (0,2);先经 R 再经 S 得到 (0,1),因此 RS≠SR。

列向量约定下,RSv 是先应用右边的 S,再应用 R。图形库若采用另一种向量或矩阵约定,代码里的乘法顺序应以该库为准。

普通二维线性变换必须把原点映射到原点,所以“整体平移 3 个单位”不能只靠一个普通 2×2 矩阵表达。可以写成仿射变换 Av+b,或使用齐次坐标;先理解为何需要额外项,再学习更大的矩阵。

练习 ​

  1. (3,4) 归一化后的单位向量是什么?
  2. [1234] 乘以列向量 (2,1) 得到什么?
  3. 零向量能直接代入余弦相似度公式吗?
查看答案与讲解
  1. 除以长度 5,得到 (3/5,4/5),长度为 1。
  2. 第一分量 1×2+2×1=4,第二分量 3×2+4×1=10,得到 (4,10)。
  3. 不能,分母为 0。可按业务拒绝、跳过或单独定义其相似度,但应明确约定,不能当成公式自然给出的结果。

资料与延伸 ​

MIT 18.06 线性代数 提供从线性方程组到向量空间和特征值的完整课程。本篇只建立向量与变换直觉;线性回归、最小二乘和降维需要继续补充矩阵秩、投影等概念。

继续阅读