Vector 向量

Vector 向量 最基本的形式,就是一组有顺序的元素(数字)。

在线性代数中,向量表示向量空间(线性空间)中的元素

向量可以看作矩阵的特例,这是现代线性代数的标准观点。

观点:数学中的向量

在数学中,向量指的是一组有序数字 a set of numbers

v=[123]\mathbf{v}= \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix}

viv_i 指向量的某个 component,v1=1v2=2v_1=1,v_2=2

如果一个向量的 component 个数小于4个,是可以在平面上画(想象)出来的,例如:在经典的笛卡尔坐标系中,可以用 v=(1,2,3)\mathbf{v}=(1,2,3),表示空间中的一个坐标点 或 一个有方向、长度的 箭头(矢量)。

系数矩阵中,可以用 v=(1,2,3)\mathbf{v}=(1,2,3),表示矩阵中的一个列向量(在约定下,默认视为列向量,因为数学上括号本身没有方向性)。vT=(1,2,3)\mathbf{v}^T=(1,2,3),表示矩阵中的一个行向量,用角标 TT 表示形式上要把这个向量从 竖向 转为横向

属性-维度

维度就是向量中数字的个数。比如:

v=[123]\mathbf{v}= \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix}

有 3 个数字,所以说它是一个 三维向量。我们还可以进一步解释说,这是一个 vR3\mathbf{v} \in \mathbb{R}^3(读作"向量 v 属于三维实数空间")。这个向量也可以书写成:

v=(1,2,3)\mathbf{v}=(1,2,3)

一般来说,含有 nn 个数字的向量就是 nn 维向量,记作 vRn\mathbf{v} \in \mathbb{R}^nnn 维向量 最常用来表示空间的坐标,所以又会被解释成为 nn 维空间。

属性-长度

向量的 normnorm 长度(也叫模、范数,)用 v\|\mathbf{v}\| 表示,计算方式是把每个分量平方、相加、再开根号:

v=12+22+32=14\|\mathbf{v}\| = \sqrt{1^2 + 2^2 + 3^2} = \sqrt{14}

之所以会被叫作长度是因为求取的过程在二维空间下就是勾股定理的计算过程。二维向量 (x,y)(x, y) 的长度是:

x2+y2\sqrt{x^2+y^2}

三维向量的长度就是 x2+y2+z2\sqrt{x^2+y^2+z^2},依此类推。 nn 维:

v=x12+x22++xn2 \|\mathbf{v}\| = \sqrt{x_1^2+x_2^2+\cdots+x_n^2}

也可以写成:

v=i=1nxi2\|\mathbf{v}\| = \sqrt{\sum_{i=1}^{n}x_i^2}

高维空间中已经看不出勾股定理的几何意义了,但其作为一个量又是客观存在的。

属性-单位向量

长度为 1 的向量称为 unit vector 单位向量,它表示纯粹的方向

任何一个非零向量都可以"剥离"长度、只留下方向,得到一个单位向量——做法是除以自己的长度,这一步过程叫normalize 归一化

v^=vv\hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}

单位向量常用"帽子"记号 v^\hat{\mathbf{v}} 表示。比如 (3,4)(3,4),长度是 32+42=5\sqrt{3^2+4^2}=5,每个分量除以 55,单位向量为:

v^=(0.6, 0.8)\hat{\mathbf{v}} = (0.6,\ 0.8)

反过来,任何向量都可以拆成"长度 \cdot 方向“两部分:

v=vv^\mathbf{v} = \|\mathbf{v}\| \cdot \hat{\mathbf{v}}

最常用的单位向量是三个坐标轴方向标准基向量

i^=[100],j^=[010],k^=[001]\hat{\mathbf{i}} = \begin{bmatrix} 1\\ 0\\ 0 \end{bmatrix},\quad \hat{\mathbf{j}} = \begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix},\quad \hat{\mathbf{k}} = \begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix}

任何三维向量都能写成它们的组合:v=(1,2,3)=1i^+2j^+3k^\mathbf{v} = (1,2,3) = 1\hat{\mathbf{i}} + 2\hat{\mathbf{j}} + 3\hat{\mathbf{k}}

观点:同一个空间下的向量都可以看作是另一个非零向量的线性变换的结果

同一空间中,给定任意非零向量 u\mathbf u 和任意目标向量 v\mathbf v必定存在一个线性变换 TT(也就是一个矩阵 AA ),使得:

T(u)=Au=vT(\mathbf u)=A\mathbf u=\mathbf v

观点:向量可以看作矩阵的特例

向量 可以看作矩阵的特例,这是现代线性代数的标准观点。

一个矩阵如果只有一行1×n1 \times n)或只有一列n×1n \times 1),因其仅具有单一方向,即可被视为向量。其中,竖排的称为列向量(column vector),横排的称为行向量(row vector):

  • n×1n×1矩阵 就是 列向量(column vector)
  • 1×n1×n 矩阵 就是 行向量(row vector)

所以,我们常把一个矩阵的行向量 aT\mathbf{a}^T,与 参数向量 b\mathbf{b}(也就是AxAx中的xx) 进行 点积 运算:

aTb=ab=i=1naibi\mathbf{a}^T\mathbf{b} = \mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^n a_i b_iAx=[a1Ta2TamT][x1x2xn]=[a1Txa2TxamTx]=[j=1na1jxjj=1na2jxjj=1namjxj]=[a11x1+a12x2++a1nxna21x1+a22x2++a2nxnam1x1+am2x2++amnxn]A\mathbf{x} = \begin{bmatrix} — & \mathbf{a}_1^T & — \\ — & \mathbf{a}_2^T & — \\ \vdots & \vdots & \vdots \\ — & \mathbf{a}_m^T & — \end{bmatrix} \begin{bmatrix} x_1 \\ x_2 \\ \vdots \\ x_n \end{bmatrix} = \begin{bmatrix} \mathbf{a}_1^T \mathbf{x} \\ \mathbf{a}_2^T \mathbf{x} \\ \vdots \\ \mathbf{a}_m^T \mathbf{x} \end{bmatrix} = \begin{bmatrix} \sum_{j=1}^n a_{1j} x_j \\ \sum_{j=1}^n a_{2j} x_j \\ \vdots \\ \sum_{j=1}^n a_{mj} x_j \end{bmatrix} = \begin{bmatrix} a_{11}x_1 + a_{12}x_2 + \cdots + a_{1n}x_n \\ a_{21}x_1 + a_{22}x_2 + \cdots + a_{2n}x_n \\ \vdots \\ a_{m1}x_1 + a_{m2}x_2 + \cdots + a_{mn}x_n \end{bmatrix}

因为:

表达式严格类型输出形状本质
aTb\mathbf{a}^T\mathbf{b}矩阵乘法1×n1×n 乘 n×1n×11×1 矩阵一个“退化的矩阵”,表示一个数
a⋅b内积/点积(两个nn维度的向量)标量(Scalar)一个数

数值上[32]=32[32]=32,日常使用中完全等价,没有人会纠结这个差别。

运算-加法

两个同维向量相加,就是对应位置上的数字分别相加:

[123]+[456]=[1+42+53+6]=[579]\begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix} + \begin{bmatrix} 4\\ 5\\ 6 \end{bmatrix} = \begin{bmatrix} 1+4\\ 2+5\\ 3+6 \end{bmatrix} = \begin{bmatrix} 5\\ 7\\ 9 \end{bmatrix}

结果仍然是一个同维的向量。

运算-标量乘法

一个普通的数字(叫标量,scalar)乘以一个向量,就是把这个数字乘到向量的每一个分量上。分量在这里指的就是向量中的每个元素:

2[123]=[212223]=[246]2 \cdot \begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix} = \begin{bmatrix} 2*1\\ 2*2 \\ 2*3 \end{bmatrix} = \begin{bmatrix} 2\\ 4\\ 6 \end{bmatrix}

标量乘法的效果是缩放向量:乘以 2 长度变为原来的 2 倍,乘以负数还会让方向反过来。

运算-点积  ⭐️⭐️⭐️⭐️⭐️

Dot Product 点积,又称内积(Inner Product)或标量积(Scalar Product),是两个相同维度向量之间的一种运算,结果是一个标量(数)

代数运算:定义

a,bRna,b∈R^n 是两个 nn 维向量:

a=(a1a2an),b=(b1b2bn)\mathbf{a} = \begin{pmatrix} a_1 \\ a_2 \\ \vdots \\ a_n \end{pmatrix}, \quad \mathbf{b} = \begin{pmatrix} b_1 \\ b_2 \\ \vdots \\ b_n \end{pmatrix}

它们的点积定义为对应分量相乘后求和:

ab=i=1naibi=a1b1+a2b2++anbn\mathbf{a} \cdot \mathbf{b} = \sum_{i=1}^{n} a_i b_i = a_1b_1 + a_2b_2 + \cdots + a_nb_n

例如:

[123][456]=1×4+2×5+3×6=32\begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix} \cdot \begin{bmatrix} 4\\ 5\\ 6 \end{bmatrix} = 1\times4 + 2\times5 + 3\times6 = 32

注意 ⚠️

  • 运算的结果 不再是向量,而是一个 标量
  • 参与运算的两个向量必须是相同的维度(向量中元素的个数一致)

几何运算:投影

点积有一个重要的几何形式:

ab=abcosθ\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \, \|\mathbf{b}\| \cos\theta

其中 θ\theta 是两个向量的夹角。这说明 点积 实际上在度量两个向量 考虑了彼此长度与方向后的整体一致性

  • ab\|\mathbf{a}\| \, \|\mathbf{b}\| 值越大,表示 a,ba,b 这两向量本来的长度就越大
  • θ=90°\theta = 90° 时点积为 00 , 垂直
  • θ<90°\theta < 90°, 点积为正,说明两个向量的方向夹角小于90°(在同一个半空间内)
  • θ>90°\theta > 90°, 点积为负,说明夹角大于90°

公式 ab=abcosθ\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \, \|\mathbf{b}\| \cos\theta 可以拆成两部分来读:

ab=acosθa 在 b 方向上的投影长度×bb 的长度\mathbf{a} \cdot \mathbf{b} = \underbrace{\|\mathbf{a}\| \cos\theta}_{\mathbf{a}\ \text{在}\ \mathbf{b}\ \text{方向上的投影长度}} \times \underbrace{\|\mathbf{b}\|}_{\mathbf{b}\ \text{的长度}}

也就是说:点积” 是一个向量 a\mathbf{a} 落在另一个向量 b\mathbf{b} 上的投影长度 " 乘 " b\mathbf{b} 的长度"——先量一量 a\mathbf{a} 有多少"成分"落在 b\mathbf{b} 的方向上,再按 b\mathbf{b} 的个头放大。

二维空间的例子

a=(2,2)\mathbf{a}=(2,2)b=(3,0)\mathbf{b}=(3,0)(沿 x 轴):

  • 代数运算:ab=2×3+2×0=6\mathbf{a}\cdot\mathbf{b} = 2\times3 + 2\times0 = 6
  • 几何运算:a\mathbf{a} 指向 45° 方向,它"投在 x 轴上的影子"长度是 22(恰好是 a\mathbf{a} 的 x 分量),乘上 b\mathbf{b} 的长度 33,得 2×3=62 \times 3 = 6

两种算法结果一致——点积的代数运算和几何运算过程说的是同一件事。

图中:蓝色的 a=(2,2)\mathbf{a}=(2,2) 被"垂直照"到 b\mathbf{b}(x 轴方向)上,红色的影子就是投影——长度 22(虚线垂直落下,带直角标记)。点积 ab\mathbf{a}\cdot\mathbf{b} 就是这个影子长度 22 乘上 b\mathbf{b} 的长度 33,得 66

思考🤔:为什么结果不在这个图片中表示出来?

标量没有几何形状,向量才有:点积的结果是一个标量——一个纯粹的数字,没有方向、没有位置,在坐标系里"无箭可画"。图里能画出来的只是它的两个零件:投影长度 22(红箭头)和 b\mathbf{b} 的长度 33(绿箭头)。

三维空间的例子

空间里任意两个向量 a,b\mathbf{a}, \mathbf{b} 一定同在某个过原点的平面内(两条相交直线确定一个平面),所以三维里"夹角"和"投影"的画面跟二维完全一样,只是这个平面可能斜在空间里。

a=(1,2,3)\mathbf{a}=(1,2,3)b=(0,0,5)\mathbf{b}=(0,0,5)(沿 z 轴):

ab=1×0+2×0+3×5=15\mathbf{a}\cdot\mathbf{b} = 1\times0 + 2\times0 + 3\times5 = 15

恰好是"a\mathbf{a} 在 z 轴上的投影长度 33" 乘 “b\mathbf{b} 的长度 55"。

一个很有用的特例:b\mathbf{b} 是单位向量时b=1\|\mathbf{b}\|=1,点积就纯粹是投影长度

ab^=acosθ\mathbf{a} \cdot \hat{\mathbf{b}} = \|\mathbf{a}\| \cos\theta

这解释了"坐标"是怎么算出来的:向量 v=(3,1,2)\mathbf{v}=(3,1,2) 与标准基向量 i^=(1,0,0)\hat{\mathbf{i}}=(1,0,0) 做点积:

vi^=3×1+1×0+2×0=3\mathbf{v} \cdot \hat{\mathbf{i}} = 3\times1 + 1\times0 + 2\times0 = 3

结果正是 v\mathbf{v} 的 x 分量——坐标本质上就是向量在各个基方向上的投影长度。这和 Basis 基 里"坐标是路线指南"的说法,是同一件事的两种表述。

作用:比较两个向量谁更契合目标

假设有一个目标向量 a\mathbf a,现在要比较候选向量 b\mathbf bc\mathbf c。这时不能直接套公式,必须先问:我要比较综合影响,还是只比较方向?

因为点积同时受到两个因素影响:

ab=abcosθ\mathbf a\cdot\mathbf b=\|\mathbf a\|\,\|\mathbf b\|\cos\theta
  • cosθ\cos\theta 越大,表示方向越接近;
  • b\|\mathbf b\| 越大,点积也可能越大,即使方向并不更接近。

因此,向量模长可能造成“模长作弊”:一个向量只是更长,却在原始点积比较中占了优势。

想比较什么是否保留模长影响使用的指标
综合影响力:做功、信号强度、加权贡献保留。模长大本身就是优势直接比较 ab\mathbf a\cdot\mathbf bac\mathbf a\cdot\mathbf c
方向相似度:文本匹配、特征匹配、Embedding 检索排除。只关注方向是否一致比较余弦相似度:
ababacac\frac{\mathbf a\cdot\mathbf b}{\|\mathbf a\|\,\|\mathbf b\|}\quad\text{和}\quad\frac{\mathbf a\cdot\mathbf c}{\|\mathbf a\|\,\|\mathbf c\|}

|

这就是为什么机器学习中的文本相似度通常使用 Cosine Similarity(余弦相似度),而不是直接比较点积:文本向量的长度可能表示文本数量、频率或模型置信度,不一定代表语义方向更接近。

作用:判断两向量是否垂直(正交)

垂直的判断完全不用算角度——由 ab=abcosθ\mathbf{a} \cdot \mathbf{b} = \|\mathbf{a}\| \, \|\mathbf{b}\| \cos\thetaθ=90°\theta = 90°cosθ=0\cos\theta = 0,所以:

ab=0    ab(非零向量)\mathbf{a} \cdot \mathbf{b} = 0 \iff \mathbf{a} \perp \mathbf{b} \quad(\text{非零向量})

两个向量垂直时也叫正交(orthogonal)。判断一次垂直只需要 nn 次乘法加法,连长度都不用算。比如:

(3,4)(4,3)=1212=0(3,4) \cdot (4,-3) = 12 - 12 = 0

一眼看出这两个向量垂直。这个性质在后面非常重要:如果一组基两两正交(正交基),坐标之间互不干扰,计算会简单得多;机器学习里"特征不相关"“注意力里的正交初始化"都和它有关。

作用:计算夹角

把几何形式倒过来用,就得到夹角公式:

cosθ=ababθ=arccos(abab)\cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \, \|\mathbf{b}\|} \qquad\Rightarrow\qquad \theta = \arccos\left(\frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \, \|\mathbf{b}\|}\right)

比如 a=(2,2)\mathbf{a}=(2,2)b=(3,0)\mathbf{b}=(3,0):点积 =6=6a=22\|\mathbf{a}\|=2\sqrt{2}b=3\|\mathbf{b}\|=3,所以:

cosθ=622×3=12θ=45°\cos\theta = \frac{6}{2\sqrt{2} \times 3} = \frac{1}{\sqrt{2}} \quad\Rightarrow\quad \theta = 45°

和前面的几何画面一致((2,2)(2,2) 本来就指向 45° 方向)。

注意这个公式的右边——正是下文"计算机科学中的向量"里的余弦相似度。所以"余弦相似度"不是什么新东西,它就是"两个向量的夹角余弦”:方向越一致(θ\theta 越小),值越接近 11;垂直为 00;相反为 1-1

作用:向量投影

点积不光能算"投影长度”,还能算出投影向量本身——a\mathbf{a} 投到 b\mathbf{b} 方向上的那个"影子向量",记作 projba\text{proj}_{\mathbf{b}}\,\mathbf{a}

projba=abb投影长度(标量)b^方向=abbb b\text{proj}_{\mathbf{b}}\,\mathbf{a} = \underbrace{\frac{\mathbf{a}\cdot\mathbf{b}}{\|\mathbf{b}\|}}_{\text{投影长度(标量)}} \cdot \underbrace{\hat{\mathbf{b}}}_{\text{方向}} = \frac{\mathbf{a}\cdot\mathbf{b}}{\mathbf{b}\cdot\mathbf{b}}\ \mathbf{b}

思路就是"长度 × 方向":投影长度前面已经会算了(ab^\mathbf{a}\cdot\hat{\mathbf{b}}),再乘上 b\mathbf{b} 方向的单位向量,影子向量就出来了。

比如 a=(2,2)\mathbf{a}=(2,2) 投到 b=(3,0)\mathbf{b}=(3,0) 上:

projba=69(3,0)=(2,0)\text{proj}_{\mathbf{b}}\,\mathbf{a} = \frac{6}{9}\,(3,0) = (2,0)

几何上完全合理:(2,2)(2,2) 在 x 轴上的影子就是 (2,0)(2,0)。投影是后面最小二乘法正交分解(把一个向量拆成"沿某方向的分量 + 垂直分量")的基本零件。

观点:点积的本质是一个标量

点积的结果是一个标量(数),不是坐标系中的一个点或向量。它回答的是:候选向量在目标向量方向上,贡献了多少带方向的投影?

设目标向量为 a\mathbf a,候选向量为 x\mathbf x

ax=axcosθ\mathbf a\cdot\mathbf x=\|\mathbf a\|\,\|\mathbf x\|\cos\theta

其中 θ\theta 是两向量的夹角。可以这样理解:

  • 点积为正:x\mathbf xa\mathbf a 方向上有同向分量;
  • 点积为零:x\mathbf xa\mathbf a 方向上没有分量,即 xa\mathbf x\perp\mathbf a
  • 点积为负:x\mathbf x 有反向分量。

当目标向量 a\mathbf a 固定,并且把点积固定为某个数 kk 时,所有满足

ax=k\mathbf a\cdot\mathbf x=k

的候选向量终点会落在一条垂直于 a\mathbf a 的直线上(在更高维空间中则是一个超平面)。这是一条“点积等值线”,不是点积本身变成了几何直线。

a=(2,2)\mathbf a=(2,2)k=6k=6 为例:

ax=62x+2y=6x+y=3\mathbf a\cdot\mathbf x=6 \quad\Longleftrightarrow\quad 2x+2y=6 \quad\Longleftrightarrow\quad x+y=3

因此 (1,2)(1,2)(2,1)(2,1)(0,3)(0,3) 等所有终点都在同一条直线 x+y=3x+y=3 上;它们虽然方向和长度不同,但与 a\mathbf a 的点积相同。

这张图里,蓝色箭头是固定的目标向量 a\mathbf a,绿色箭头是不同的候选向量。它们的箭头终点都落在灰色虚线(等值线)x+y=3x+y=3 上,所以与 a\mathbf a 的点积都等于 66。注意:灰色虚线不是法向量;它是一条直线,而蓝色向量 a\mathbf a 才是这条直线的Normal Vector 法向量

为什么等值线一定垂直于 a\mathbf a

先看图中的具体例子:

a=(2,2),ax=6x+y=3\mathbf a=(2,2),\qquad \mathbf a\cdot\mathbf x=6 \quad\Longleftrightarrow\quad x+y=3

这条等值线的方向是什么?沿着直线走一步,可以让 xx 增加 11yy 减少 11,所以它的方向向量可以取:

d=(1,1)\mathbf d=(1,-1)

现在计算它和目标向量的点积:

ad=(2,2)(1,1)=22=0\mathbf a\cdot\mathbf d=(2,2)\cdot(1,-1)=2-2=0

点积为 00,说明 (1,1)(1,-1)(2,2)(2,2) 垂直。因此,等值线 x+y=3x+y=3 的方向与 a\mathbf a 垂直。这里的灰色虚线是“线”,不能称为一个法向量;准确说法是:a\mathbf a 是这条线的法向量。

观点:内积的上限,就是两个向量模的乘积

两个向量的内积(点积)可以写成:

ab=abcosθ\mathbf a\cdot\mathbf b=\|\mathbf a\|\,\|\mathbf b\|\cos\theta

其中 θ\theta 是两个向量的夹角。因为:

1cosθ1-1\le\cos\theta\le1

所以内积一定满足:

ababab-\|\mathbf a\|\,\|\mathbf b\| \le \mathbf a\cdot\mathbf b \le \|\mathbf a\|\,\|\mathbf b\|

这就是 Cauchy–Schwarz Inequality(柯西-施瓦茨不等式)。它的核心意思是:

内积的绝对值不可能超过两个向量模长的乘积。

什么时候达到上限?

当两个向量方向完全相同,即 θ=0\theta=0^\circcosθ=1\cos\theta=1 时,内积达到上限:

ab=ab\mathbf a\cdot\mathbf b=\|\mathbf a\|\,\|\mathbf b\|

例如:

a=(2,2),b=(3,3)\mathbf a=(2,2),\qquad \mathbf b=(3,3)

它们同向,因此:

ab=2×3+2×3=12\mathbf a\cdot\mathbf b=2\times3+2\times3=12

而:

ab=(22)(32)=12\|\mathbf a\|\,\|\mathbf b\|=(2\sqrt2)(3\sqrt2)=12

两者正好相等。

下限与垂直

当两个向量方向完全相反,即 θ=180\theta=180^\circ 时,内积达到下限:

ab=ab\mathbf a\cdot\mathbf b=-\|\mathbf a\|\,\|\mathbf b\|

当两个向量垂直时,θ=90\theta=90^\circ,内积为 00。因此,内积的正负和大小可以同时反映方向关系:同向为正,垂直为零,反向为负;越接近同向,内积越接近上限。

运算-叉积

叉积crossproductcross product)是三维向量特有的运算,结果是一个向量,而不是标量:

[123]×[456]=[2×63×53×41×61×52×4]=[363]\begin{bmatrix} 1\\ 2\\ 3 \end{bmatrix} \times \begin{bmatrix} 4\\ 5\\ 6 \end{bmatrix} = \begin{bmatrix} 2\times6 - 3\times5\\ 3\times4 - 1\times6\\ 1\times5 - 2\times4 \end{bmatrix} = \begin{bmatrix} -3\\ 6\\ -3 \end{bmatrix}

一般地,对于 a=(a1,a2,a3)\mathbf{a}=(a_1,a_2,a_3)b=(b1,b2,b3)\mathbf{b}=(b_1,b_2,b_3)

a×b=[a2b3a3b2a3b1a1b3a1b2a2b1]=v\mathbf{a} \times \mathbf{b} = \begin{bmatrix} a_2 b_3 - a_3 b_2\\ a_3 b_1 - a_1 b_3\\ a_1 b_2 - a_2 b_1 \end{bmatrix} = \mathbf{v}

叉积的几何意义

叉积结果的几何意义,可以拆成方向长度两件事来理解。

方向:垂直于 a、b 所在的平面

a×b\mathbf{a} \times \mathbf{b} 垂直于 a\mathbf{a}b\mathbf{b} 张成的那张平面(这样的向量叫 Normal Vector 法向量),具体指向由右手定则决定,大拇指的指向就是结果方向。

Pasted image 20260901111139

最简单的例子:x 轴y 轴 = z 轴

i^×j^=[100]×[010]=[001]=k^\hat{\mathbf{i}} \times \hat{\mathbf{j}} = \begin{bmatrix} 1\\ 0\\ 0 \end{bmatrix} \times \begin{bmatrix} 0\\ 1\\ 0 \end{bmatrix} = \begin{bmatrix} 0\\ 0\\ 1 \end{bmatrix} = \hat{\mathbf{k}}

交换顺序后 j^×i^=k^\hat{\mathbf{j}} \times \hat{\mathbf{i}} = -\hat{\mathbf{k}},方向掉转——所以叉积不满足交换律a×b=(b×a)\mathbf{a} \times \mathbf{b} = -(\mathbf{b} \times \mathbf{a})

a\mathbf{a}b\mathbf{b} 一旦确定一张平面,三维空间里"和这张平面垂直"是唯一不含糊的新方向(算上正反一共两个,右手定则再确定一个)。这个性质非常实用:已知平面上两个向量,叉积立刻给出平面的朝向——3D 图形学算光照、物理算力矩都靠它。

长度:a\mathbf{a}b\mathbf{b} 张成的平行四边形面积

v=a×b=absinθ\|\mathbf{v}\|=\|\mathbf{a} \times \mathbf{b}\| = \|\mathbf{a}\| \, \|\mathbf{b}\| \sin\theta

a\|\mathbf{a}\| 看作平行四边形的,那么 bsinθ\|\mathbf{b}\|\sin\theta 就是b\mathbf{b} 在垂直于 a\mathbf{a} 方向上的分量),底 × 高正好是平行四边形的面积。也就是说,v\mathbf{v} 的模等于 a\mathbf{a}b\mathbf{b} 组成的平行四边形的面积大小。

例子:把叉积的结果画出来

a=(2,0,0)\mathbf{a}=(2,0,0)b=(1,2,0)\mathbf{b}=(1,2,0) 都在 xy 平面上:

a×b=[0×00×20×12×02×20×1]=[004]\mathbf{a} \times \mathbf{b} = \begin{bmatrix} 0\times0-0\times2\\ 0\times1-2\times0\\ 2\times2-0\times1 \end{bmatrix} = \begin{bmatrix} 0\\ 0\\ 4 \end{bmatrix}
  • 长度v=4\|\mathbf{v}\|=4——以 a\mathbf{a} 为底(长 22)、b\mathbf{b} 的高是 22(y 分量),面积 2×2=42\times2=4
  • 方向+z+z 轴,确实垂直于 xy 平面

把结果画在三维坐标系里:a\mathbf{a}b\mathbf{b} 张成的蓝色平行四边形躺在 xy 平面上,红色的 a×b\mathbf{a} \times \mathbf{b} 从原点沿 +z+z 轴"竖"起来,长度 44 正好是蓝色平行四边形的面积:

换个视角:从 z 轴正上方往下看。 下面这张动图把镜头从斜视角"倒"到俯视——3D 场景逐渐躺平成 xy 平面图,红色的 a×b\mathbf{a} \times \mathbf{b} 缩成一个点(用 ⊙ 表示"垂直冲出纸面"):

从这个角度看,右手定则变得一目了然:从 a\mathbf{a} 转向 b\mathbf{b}逆时针(绿色弧线),右手四指跟着逆时针弯,大拇指指向自己——也就是 +z+z、冲出纸面。

区分: 叉积 VS 行列式

叉积和 行列式 看着是两个东西,其实度量的是同一个量——平行四边形的(带正负号的)面积

先看二维行列式。 取两个二维向量 a=(1,2)\mathbf{a}=(1,2)b=(3,1)\mathbf{b}=(3,1),拼成矩阵求行列式:

det[1321]=1×12×3=5\det\begin{bmatrix} 1&3\\ 2&1 \end{bmatrix} = 1\times1 - 2\times3 = -5

绝对值 55 是它们张成的平行四边形面积;正负号携带的是"顺逆"信息:这里是负的,因为从 a\mathbf{a} 转向 b\mathbf{b}顺时针b\mathbf{b}a\mathbf{a} 的右侧)。

再把同样两个向量垫进三维的 xy 平面里做叉积a=(1,2,0)\mathbf{a}=(1,2,0)b=(3,1,0)\mathbf{b}=(3,1,0)

a×b=[2×00×10×31×01×12×3]=[005]\mathbf{a} \times \mathbf{b} = \begin{bmatrix} 2\times0-0\times1\\ 0\times3-1\times0\\ 1\times1-2\times3 \end{bmatrix} = \begin{bmatrix} 0\\ 0\\ -5 \end{bmatrix}

结果的 x、y 分量都是 00(向量必然垂直于 xy 平面),唯一非零的 z 分量正好就是那个二维行列式。正负号在这里还有了几何化身:z 分量为负,意味着结果指向 z-z——用右手从 a\mathbf{a} 顺时针弯向 b\mathbf{b},大拇指自然朝下。

所以两者的关系是:

二维行列式 = 把向量垫进三维做叉积后的 z 分量。 行列式用一个带符号的数,同时打包了"面积多大"和"谁顺谁逆"两个信息;叉积则把它升级成一个三维向量——长度是面积,指向用右手定则编码了顺逆。

更深一层:回头看叉积的公式,它的每个分量本身就是一个 2×2 行列式

a×b=[det[a2b2a3b3]det[a3b3a1b1]det[a1b1a2b2]]\mathbf{a} \times \mathbf{b} = \begin{bmatrix} \det\begin{bmatrix} a_2 & b_2\\ a_3 & b_3 \end{bmatrix}\\[6pt] \det\begin{bmatrix} a_3 & b_3\\ a_1 & b_1 \end{bmatrix}\\[6pt] \det\begin{bmatrix} a_1 & b_1\\ a_2 & b_2 \end{bmatrix} \end{bmatrix}

——叉积就是"在三张坐标平面上的投影面积"拼成的向量。Determinant 行列式 那篇笔记里的面积图,说的正是这件事。

区分: 叉积 VS 点积

点积和叉积像一对互补的工具——点积回答"两个方向有多像",叉积回答"两个方向有多岔"

点积 ab\mathbf{a}\cdot\mathbf{b}叉积 a×b\mathbf{a}\times\mathbf{b}
结果标量向量(垂直于原平面)
大小abcosθ\|\mathbf{a}\|\,\|\mathbf{b}\|\cos\thetaabsinθ\|\mathbf{a}\|\,\|\mathbf{b}\|\sin\theta(结果的模)
等于 00两向量垂直两向量平行
维度任意维仅三维
交换律满足:ab=ba\mathbf{a}\cdot\mathbf{b}=\mathbf{b}\cdot\mathbf{a}反交换:a×b=(b×a)\mathbf{a}\times\mathbf{b}=-(\mathbf{b}\times\mathbf{a})
典型用途投影、相似度、做功法向量、面积、力矩

怎么记?cosθ\cos\thetaθ=0°\theta=0°(完全同向)时最大,所以点积量"一致性";sinθ\sin\thetaθ=90°\theta=90°(岔得最开)时最大,所以叉积量"岔开程度"。

“等于零"的判断场景正好互补:想检查两个向量是否垂直,算点积;想检查是否平行(也就是线性相关),算叉积。

概念:列向量 & 行向量

一个 nn 维向量写成竖排,就是一个 n×1n \times 1 的矩阵(叫列向量,column vector);写成横排 vT\mathbf{v}^T,就是一个 1×n1 \times n 的矩阵(叫行向量,row vector)。

观点:物理学中的向量

在物理学中,向量是既有大小、又有方向的物理量,通常画成一支带箭头的有向线段:箭头的长度表示大小,指向表示方向。

典型的向量:位移、速度、加速度、力。作为对照,温度、质量、能量这类只有大小没有方向的量,就是标量

选定坐标系之后,这支箭头就能写成一组有序的数字——这正是数学中向量的样子。比如一个力在空间中可以写成:

F=[FxFyFz]\mathbf{F} = \begin{bmatrix} F_x\\ F_y\\ F_z \end{bmatrix}

所以数学向量和物理向量是同一个对象的两种看法:一个用数字表示,一个用箭头表示。

前面介绍的向量运算,在物理中都有直接的对应:

  • 向量加法 → 矢量的合成。两个力同时作用在一个物体上,合力用平行四边形法则(或三角形法则)求出,这正是对应分量相加。位移的叠加同理:先向东走 3 km 再向北走 4 km,总位移是两个位移向量之和。
  • 标量乘法 → 缩放。力变为原来的 2 倍、方向不变,就是 2F2\mathbf{F};速度反向就是 v-\mathbf{v}
  • 点积 → 做功。力 F\mathbf{F} 推动物体产生位移 s\mathbf{s},所做的功为:
W=Fs=FscosθW = \mathbf{F} \cdot \mathbf{s} = \|\mathbf{F}\| \, \|\mathbf{s}\| \cos\theta

只有沿位移方向的分量才做功——力的方向与位移垂直时(θ=90°\theta=90°),点积为 0,不做功。比如提着箱子水平走路,向上的提力对箱子不做功。

  • 叉积 → 力矩。用扳手拧螺母时,力矩(转动的效果)为:
τ=r×F\boldsymbol{\tau} = \mathbf{r} \times \mathbf{F}

其中 r\mathbf{r} 是从转轴到施力点的位矢。力矩的方向沿转轴(由右手定则确定),大小 rFsinθ\|\mathbf{r}\|\,\|\mathbf{F}\|\sin\theta 说明:力越垂直于扳手、扳手越长,转动效果越强;沿扳手方向推拉(θ=0°\theta=0°)则完全拧不动。

  • 单位向量 → 大小与方向的分离。物理量常常要分开讨论"有多大"和"朝哪去”,单位向量正好承担"方向"的角色:
F=FF^\mathbf{F} = \|\mathbf{F}\| \, \hat{\mathbf{F}}

读作"力 = 大小 × 方向"。坐标轴方向的单位向量 i^,j^,k^\hat{\mathbf{i}}, \hat{\mathbf{j}}, \hat{\mathbf{k}}(也写作 x^,y^,z^\hat{\mathbf{x}}, \hat{\mathbf{y}}, \hat{\mathbf{z}})更是无处不在——“沿 xx 轴正方向"说的就是 i^\hat{\mathbf{i}}

物理中还有一个重要习惯:把向量平移到任何位置都视为同一个向量——只要大小和方向不变。所以力的示意图里,箭头画在哪只是示意,起作用的是它的大小和方向本身。

观点:计算机科学中的向量

在计算机科学中,向量就是一段连续存储的数字数组(一维数组、列表),比如 Python 中的:

v = [1, 2, 3]   # 一个三维向量

这里向量不再有"箭头"的直观形象,它就是一条数据记录:每个分量是一个特征(feature)的取值。比如用向量描述一套房子:

x=(面积, 房间数, 房龄)=(89, 3, 12)\mathbf{x} = (\text{面积},\ \text{房间数},\ \text{房龄}) = (89,\ 3,\ 12)

维度可以非常高——机器学习中的词向量(embedding)动辄几百上千维,每个词、每张图片、每个用户都被压缩成一个向量。

前面的运算在这里同样有直接的对应:

  • 向量加法 → 特征的叠加。词向量的经典例子:
vkingvman+vwomanvqueen\mathbf{v}_{\text{king}} - \mathbf{v}_{\text{man}} + \mathbf{v}_{\text{woman}} \approx \mathbf{v}_{\text{queen}}

减法和加法在向量的"语义空间"里对应着概念的组合。

  • 点积 → 相似度。两个向量的点积(配合长度归一化,即余弦相似度)衡量两条数据"有多像”:
similarity=cosθ=abab\text{similarity} = \cos\theta = \frac{\mathbf{a} \cdot \mathbf{b}}{\|\mathbf{a}\| \, \|\mathbf{b}\|}

推荐系统用它找"和你口味相近的用户",搜索引擎用它找"和查询最相关的文档",大模型的注意力机制(attention)本质上也是大量点积运算。

  • 长度 → 归一化。比较相似度时只关心方向、不关心长度,所以常把向量除以自己的模,变成单位向量
v^=vv\hat{\mathbf{v}} = \frac{\mathbf{v}}{\|\mathbf{v}\|}

归一化之后,余弦相似度就退化为单位向量的点积a^b^=cosθ\hat{\mathbf{a}} \cdot \hat{\mathbf{b}} = \cos\theta,计算更省、含义更纯粹——点积本身就是方向的一致性。工程上常把 embedding 提前归一化存好,之后查询时只需做矩阵乘法。

  • 标量乘法 → 加权。给某个特征调整权重,就是给向量乘上一个标量。

可以这样总结三个学科的视角:数学家看到数字,物理学家看到箭头,计算机科学家看到数组——但它们遵守同一套运算规则,这正是向量这个抽象对象的威力。