向量和矩阵基础知识
本篇讲清向量与矩阵的定义、运算和判定,并落到三维图形里的 4×4 变换。这些是后续理解注意力点积、Embedding、以及模型里大规模矩阵乘法的底座。
向量
向量既有大小又有方向,例如速度 5m/s 向东、力 10N 向上。只有大小、没有方向的叫标量,例如 5kg、30℃、10m。
- 几何表示:用有向线段表示,如 $\vec{AB}$(起点 A,终点 B)。
- 代数表示:在坐标系里用坐标表示。二维 $\vec{a}=(x,y)$,三维 $\vec{b}=(x,y,z)$。
在 AI 里,一段文本、一张图会被编成 Embedding(嵌入向量):用一长串数字表示它的语义,使「意思接近」的内容在空间里靠得更近。这串数字通常有成百上千个分量,相对二维、三维来说就是高维向量。相似度、注意力分数,都建立在这种向量运算上。
向量表示
平面二维向量
原点 $\vec{O}(0,0)$,点 $\vec{P}(x,y)$,则 $\vec{OP}=(x,y)$。
例:$\vec{v}=(2,3)$ 表示向右 2 个单位、向上 3 个单位。
两点求向量
已知 $\vec{A}(x_1,y_1)$,$\vec{B}(x_2,y_2)$,则 $\vec{AB}=(x_2-x_1,\, y_2-y_1)$。
例:$\vec{A}(1,2)$,$\vec{B}(4,6)$,$\vec{AB}=(4-1,\,6-2)=(3,4)$。
向量模长(长度)
符号:$|\vec{a}|$。
- 二维:$\vec{a}=(x,y) \implies |\vec{a}|=\sqrt{x^2+y^2}$
- 三维:$\vec{a}=(x,y,z) \implies |\vec{a}|=\sqrt{x^2+y^2+z^2}$
例:$\vec{a}=(3,4)$,$|\vec{a}|=\sqrt{3^2+4^2}=5$。
特殊向量
- 零向量:$\vec{0}$,大小为 0,没有确定方向。
- 单位向量:$\vec{e}_a=\dfrac{\vec{a}}{|\vec{a}|}$($\vec{a}\neq\vec{0}$),大小为 1,常用来表示方向。
- 相反向量:$-\vec{a}$,大小相同,方向相反。
向量运算
设二维向量 $\vec{a}=(x_1,y_1)$,$\vec{b}=(x_2,y_2)$。三维运算把对应分量照同样规则加上 $z$ 即可;叉积除外,见下文。
加法(三角形法则、平行四边形法则)
把第二个向量的起点接到第一个向量的终点,和向量从第一个起点指向第二个终点。
$$\vec{a}+\vec{b}=(x_1+x_2,\, y_1+y_2)$$
减法
两向量共起点时,$\vec{a}-\vec{b}$ 从 $\vec{b}$ 的终点指向 $\vec{a}$ 的终点(指向被减数)。
$$\vec{a}-\vec{b}=(x_1-x_2,\, y_1-y_2)$$
数乘(实数 × 向量)
$$k\vec{a}=(kx_1,\, ky_1)$$
- $k>0$:方向不变,长度变为原来的 $k$ 倍。
- $k<0$:方向反向,长度变为原来的 $|k|$ 倍。
- $k=0$:得到零向量。
点积(数量积,结果是标量)
坐标公式:$\vec{a}\cdot\vec{b}=x_1x_2+y_1y_2$(三维再加 $z_1z_2$)。
几何定义:$\vec{a}\cdot\vec{b}=|\vec{a}|\,|\vec{b}|\cos\theta$,其中夹角满足 $0\le\theta\le 180^\circ$。
常用结论:
- $\vec{a}\perp\vec{b}$(垂直)当且仅当 $\vec{a}\cdot\vec{b}=0$。
- $\theta<90^\circ$,点积 $>0$(锐角、同侧)。
- $\theta>90^\circ$,点积 $<0$(钝角、反向)。
- 自身点积:$\vec{a}\cdot\vec{a}=|\vec{a}|^2$。
点积衡量两个向量在方向上的同向程度,结果是数字。用来做功、求投影、求夹角,以及算相似度。
投影:$\vec{a}$ 在 $\vec{b}$ 方向上的投影长度是 $\dfrac{\vec{a}\cdot\vec{b}}{|\vec{b}|}$。
余弦相似度(AI 检索、RAG 里常用):
$$\mathrm{cosine}(\vec{a},\vec{b})=\frac{\vec{a}\cdot\vec{b}}{|\vec{a}|\,|\vec{b}|}=\cos\theta$$
取值 $[-1,1]$。只看方向、不看长短,两个 Embedding 越同向,分数越接近 1。
叉积(向量积)
三维里,叉积的结果仍是向量。设 $\vec{a}=(x_1,y_1,z_1)$,$\vec{b}=(x_2,y_2,z_2)$:
$$\vec{a}\times\vec{b}=(y_1z_2-z_1y_2,\; z_1x_2-x_1z_2,\; x_1y_2-y_1x_2)$$
用行列式记忆:
$$ \vec{a}\times\vec{b} =\begin{vmatrix} \boldsymbol{i} & \boldsymbol{j} & \boldsymbol{k} \ x_1 & y_1 & z_1 \ x_2 & y_2 & z_2 \end{vmatrix} =\boldsymbol{i}(y_1z_2-z_1y_2)-\boldsymbol{j}(x_1z_2-z_1x_2)+\boldsymbol{k}(x_1y_2-y_1x_2)
$$
模长:$|\vec{a}\times\vec{b}|=|\vec{a}|\,|\vec{b}|\sin\theta$,等于两向量张成的平行四边形面积。
方向:$\vec{a}\times\vec{b}$ 同时垂直于 $\vec{a}$、$\vec{b}$,也就是所在平面的法向。方向由右手定则决定:右手四指从 $\vec{a}$ 弯向 $\vec{b}$,拇指指向叉积方向。
叉积衡量两个向量的垂直关系,并给出垂直于二者的新方向。用来求面积、力矩、旋转轴。
注意:得到向量的叉积定义在三维。二维里常把 $x_1y_2-x_2y_1$ 当作标量叉积,数值等于对应三维向量 $z$ 分量,也等于有向平行四边形面积。
向量平行、共线判定
$\vec{a}\parallel\vec{b}$ 当且仅当存在实数 $k$,使 $\vec{a}=k\vec{b}$(零向量与任意向量平行)。
二维坐标判定:$x_1y_2=x_2y_1$。
例:$\vec{a}=(2,4)$,$\vec{b}=(1,2)$,$\vec{a}=2\vec{b}$,互相平行。
矩阵
矩阵是数字按行列排成的数表,用来批量变换向量、写线性方程组。记作大写字母:$A$、$B$、$M$。
$m$ 行 $n$ 列叫 $m\times n$ 矩阵。例如:
$$ \boldsymbol{A}=\begin{bmatrix} a{11} & a{12} & a{13} \ a{21} & a{22} & a{23} \end{bmatrix}
$$
元素 $a_{ij}$ 表示第 $i$ 行、第 $j$ 列。
特殊矩阵
- 方阵:行数等于列数。只有方阵才谈得上行列式、特征值和逆矩阵。
- 对角矩阵:方阵,且主对角线以外全为 0;对角线上的数可以为 0。例如 $\mathbf{D}=\begin{bmatrix} 2 & 0 & 0 \ 0 & 5 & 0 \ 0 & 0 & -3 \end{bmatrix}$。
- 单位矩阵:记作 $I$,主对角线全是 1、其余为 0 的方阵,是矩阵乘法的恒等元。对可乘的 $A$,有 $AI=IA=A$。$I_3=\begin{bmatrix} 1 & 0 & 0 \ 0 & 1 & 0 \ 0 & 0 & 1 \end{bmatrix}$。
- 零矩阵:记作 $O$,所有元素为 0,不一定是方阵,是矩阵加法的零元:$A+O=A$。
单位矩阵是对角矩阵(对角线全 1)。方形零矩阵也是对角矩阵(对角线全 0)。非方的零矩阵不是对角矩阵。对角矩阵一定是方阵。
注意:非方阵 $A$($m\times n$)左右乘单位阵时,要用不同阶:$A I_n$ 与 $I_m A$。
转置
转置把行列对调,记作 $A^{\top}$:$a{ij}$ 变成 $a{ji}$。行向量是列向量的转置。$(AB)^{\top}=B^{\top}A^{\top}$。
向量和矩阵的关系
向量是最瘦的矩阵(1 列或 1 行),矩阵是一组向量排在一起:
- 列向量:$n\times 1$ 矩阵。线性代数默认用它。矩阵乘法 $Ax$ 默认右边乘列向量,解方程、特征值几乎都按列向量写。$\vec{v}_c=\begin{bmatrix} 2 \ 0 \ 0 \end{bmatrix}$
- 行向量:$1\times n$ 矩阵,常写成列向量的转置 $x^{\top}$;图形学里有时用行向量写位置或法线。$\vec{v}_r=\begin{bmatrix} 2 & 0 & 0 \end{bmatrix}$
核心用途:方阵 × 向量 = 对向量做线性变换(旋转、缩放、剪切)。平移不是三维里的线性变换,所以图形学要升到 4×4,见后文齐次坐标。
矩阵运算
加减(必须同型,行列数完全相同)
对应位置相加减:
$$\begin{bmatrix} 1 & 2 \ 3 & 4 \end{bmatrix}+\begin{bmatrix} 5 & 0 \ -1 & 2 \end{bmatrix}=\begin{bmatrix} 6 & 2 \ 2 & 6 \end{bmatrix}$$
数乘(数字 × 矩阵)
每个元素都乘上这个数:
$$2\cdot\begin{bmatrix} 1 & 3 \ 0 & -2 \end{bmatrix}=\begin{bmatrix} 2 & 6 \ 0 & -4 \end{bmatrix}$$
矩阵乘法(规则特殊)
前提:$A$ 是 $m\times p$,$B$ 是 $p\times n$,才能相乘,结果为 $m\times n$。左边的列数必须等于右边的行数。
计算:第 $i$ 行 × 第 $j$ 列,做点积。设 $C=AB$,则 $c_{ij}$ 等于 $A$ 的第 $i$ 行(行向量)与 $B$ 的第 $j$ 列(列向量)的点积。
$$ A=\begin{bmatrix} a & b \ c & d \end{bmatrix},\; B=\begin{bmatrix} e & f \ g & h \end{bmatrix},\; AB=\begin{bmatrix} ae+bg & af+bh \ ce+dg & cf+dh \end{bmatrix}
$$
$$ A=\begin{bmatrix} a & b & c \ d & e & f \ g & h & i \end{bmatrix},\; B=\begin{bmatrix} j & k & l \ m & n & o \ p & q & r \end{bmatrix},\; AB=\begin{bmatrix} aj+bm+cp & ak+bn+cq & al+bo+cr \ dj+em+fp & dk+en+fq & dl+eo+fr \ gj+hm+ip & gk+hn+iq & gl+ho+ir \end{bmatrix}
$$
关键特性:
- 一般不满足交换律:$AB$ 与 $BA$ 常常一个能乘、一个不能乘;都能乘时结果也通常不相等。仅在对易的特殊情况(如与 $I$ 相乘)才有 $AB=BA$。
- 变换的复合(列向量约定):把 $AB$ 看成变换时,从右往左做——先做 $B$,再做 $A$。即 $(AB)x=A(Bx)$。
- 单位阵:$AI=IA=A$(尺寸要配得上)。
Transformer 里的 $Q=xW_Q$、$K=xW_K$、$V=xW_V$,以及注意力里的 $QK^{\top}$,都是这里的矩阵乘法。
矩阵 × 向量
矩阵乘向量,得到变换后的新向量。二维列向量 $\vec{v}=\begin{bmatrix} x \ y \end{bmatrix}$,2 阶矩阵 $A=\begin{bmatrix} a & b \ c & d \end{bmatrix}$:
$$\vec{v}'=A\vec{v}=\begin{bmatrix} a & b \ c & d \end{bmatrix}\begin{bmatrix} x \ y \end{bmatrix}=\begin{bmatrix} ax+by \ cx+dy \end{bmatrix}$$
行向量约定则写成 $\vec{v}'=\vec{v}A$,矩阵也要改成转置形式。后文 3D 公式一律按列向量、左乘(OpenGL、Three.js 常见写法)。
3D 变换矩阵
三维平移无法用 3×3 矩阵表示成线性变换,所以把点写成齐次坐标 $(x,y,z,1)$,用 4×4 矩阵统一做缩放、旋转、平移。
单位矩阵:
$$ I_4=\begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
平移矩阵:
$$ T(t_x,t_y,t_z)=\begin{bmatrix} 1 & 0 & 0 & t_x \ 0 & 1 & 0 & t_y \ 0 & 0 & 1 & t_z \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
缩放矩阵:
$$ S(s_x,s_y,s_z)=\begin{bmatrix} s_x & 0 & 0 & 0 \ 0 & s_y & 0 & 0 \ 0 & 0 & s_z & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
绕 X 轴旋转(右手系):
$$ R_x(\theta)=\begin{bmatrix} 1 & 0 & 0 & 0 \ 0 & \cos\theta & -\sin\theta & 0 \ 0 & \sin\theta & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
绕 Y 轴旋转:
$$ R_y(\theta)=\begin{bmatrix} \cos\theta & 0 & \sin\theta & 0 \ 0 & 1 & 0 & 0 \ -\sin\theta & 0 & \cos\theta & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
绕 Z 轴旋转:
$$ R_z(\theta)=\begin{bmatrix} \cos\theta & -\sin\theta & 0 & 0 \ \sin\theta & \cos\theta & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1 \end{bmatrix}
$$
欧拉角顺序:没有唯一「标准」。列向量左乘时,写在右边的先作用。例如 Unity 默认欧拉角是 ZXY,对应 $R_{\mathrm{total}}=R_y R_x R_z$(先 $R_z$,再 $R_x$,最后 $R_y$)。Three.js 默认欧拉角是 XYZ,复合顺序就不同。必须和引擎约定一致。
模型变换(模型空间 → 世界空间):常见流程是先缩放、再旋转、最后平移。列向量下写成 $M_{\mathrm{model}}=T\,R\,S$。
带三轴旋转(按上面的 ZXY)时:$M_{\mathrm{model}}=T\,R_y\,R_x\,R_z\,S$。
总结
向量带大小和方向,点积出标量(夹角、投影、余弦相似度),三维叉积出法向。矩阵是排成表的数,乘法按「行点列」,列向量约定下变换从右往左复合。方阵才能谈逆与特征值;对角线上以外为 0 的方阵才是对角矩阵。三维图形用齐次坐标和 4×4 矩阵把缩放、旋转、平移写成同一种乘法。