1.1 向量与基本运算
线性代数的整体框架,建立在一个对象之上——向量。本节将围绕向量的几何本质、代数运算、度量方式、乘法规则与组合方式五个层面,循序渐进地建立起代数—几何—工程的三层意义。理解向量需要在代数、几何、工程三种视角之间自由切换,而不仅是记住定义与公式。
1.1.1 向量的几何本质与坐标表达
标量与向量的数学定义对比
在进入向量之前,先回顾一个更基础的对象——标量(Scalar)。标量是一个只用一个数就能完全描述的量,例如温度
向量(Vector)则不同,它同时携带多少和哪个方向两重信息。一个三维力
从数学形式上看,标量是
向量的几何具象化:有向线段
把向量放在坐标系中,直观的几何形象是一根带方向的线段,称为有向线段。它有两个关键属性:模长(线段的长度,表示向量的大小)与方向(箭头指向,表示向量的朝向)。在二维平面中,向量
向量的几何本质是方向 + 模长,与起点无关。把同一根箭头平移到平面任何位置,它仍然代表同一个向量。这一点初学者常常忽略,但它却是后续理解自由向量与线性变换的关键。在工程实践中,无论把图像特征向量存在内存的哪个位置,它所表示的特征方向是不变的。
向量的代数具象化:有序数对
几何形象直观但不便于计算,因此需要把向量翻译成代数语言。一个
向量有两种书写形式:列向量与行向量。列向量把分量竖向排列:
行向量把分量横向排列:
书写规范提示
在数学推导中,向量通常用粗体小写字母
零向量与负向量
零向量(Zero Vector)是所有分量都为
负向量(Negative Vector)是与原向量大小相等、方向相反的向量。若
单位向量与归一化
单位向量(Unit Vector)是模长为
给定非零向量
其中
import numpy as np
# 一个非零向量
v = np.array([3.0, 4.0])
# 模长(L2 范数)
norm_v = np.linalg.norm(v)
print(f"|v| = {norm_v}") # 输出 5.0
# 归一化得到单位向量
v_hat = v / norm_v
print(f"v̂ = {v_hat}") # 输出 [0.6 0.8]
print(f"|v̂| = {np.linalg.norm(v_hat)}") # 输出 1.0标准正交基:i, j, k
在三维空间中,有三个特殊的单位向量构成了整个空间的骨架,它们是
这三个向量分别指向
任何一个三维向量
这就是为什么向量的坐标
自由向量与固定向量的区别
至此需要澄清一个常被忽略的概念区分:自由向量(Free Vector)与固定向量(Bound Vector / Position Vector)。
自由向量只关心方向和模长,与起点无关。把它平移到空间任何位置,仍然代表同一个向量。本教程中讨论的向量运算(加法、数乘、点积、叉积)默认都是对自由向量进行的。在数学推导中,把向量平移到同一起点是为了便于几何作图,但向量本身是自由的。
固定向量则与起点绑定,常用于描述物理中的位置或位移。例如,质点的位置向量
为什么这个区分重要
在物理学中,把力当作固定向量处理才能正确计算力矩;在数学中,把向量当作自由向量才能定义两个向量相等——只要方向相同、模长相等就视为相等,不必关心起点。本教程后续讨论的线性代数概念(如线性组合、张成、线性无关)都建立在自由向量的前提下。
向量坐标与空间点的坐标映射
向量与空间点之间存在一一对应关系:向量
这种映射使得点与向量在很多时候可以互换使用,但要理解它们的语义差异:点描述位置,向量描述方向与位移。说点
1.1.2 向量的代数运算与几何可视化
向量能成为线性代数的核心对象,在于它定义了一组结构良好的运算。本节核心的两个运算是加法与数乘,它们共同构成了线性结构的全部内容。后续将要学习的线性变换、线性空间、线性组合等概念,其线性二字都源自这两条运算规则。
加法:分量法则与几何实现
两个
这个理解在代数上很简单,在几何上有两种理解方式:
三角形法则(首尾相连):把向量
平行四边形法则(同起点):把
import numpy as np
u = np.array([2.0, 1.0])
v = np.array([1.0, 2.0])
# 三角形法则 / 平行四边形法则的代数实现都是分量相加
w = u + v
print(f"u + v = {w}") # 输出 [3. 3.]加法运算律的可视化验证
向量加法满足两条关键运算律,它们看起来显然成立,但理解其几何含义能为后续学习抽象代数打下基础。
交换律:
结合律:
减法:同起点连终点
向量减法
几何上有一个非常实用的口诀:同起点,连终点,指向被减向量。把
减法也可以转化为加法:
数乘:分量伸缩法则
向量
每个分量都乘以
:向量被拉伸,方向不变(若 )或反向(若 )。例如 是 长度变为 倍。 :向量被压缩,方向同样取决于 的符号。例如 是 长度变为 。 :向量被反向,再按 伸缩。例如 是反向不伸缩, 是反向并拉伸 倍。 :得到零向量 ,无论原向量方向如何。
数乘满足几条重要的运算律:
import numpy as np
v = np.array([1.0, 2.0, 2.0])
# 数乘的各种情形
print(f"2v = {2 * v}") # 拉伸 2 倍
print(f"0.5v = {0.5 * v}") # 压缩到 1/2
print(f"-v = {-v}") # 反向
print(f"-2v = {-2 * v}") # 反向并拉伸
print(f"0v = {0 * v}") # 零向量1.1.3 向量的度量与空间距离
向量有了,下一步就是测量它。本节将定义几种核心的度量:模长、距离、夹角,它们是后续学习范数、距离度量学习、向量相似度的基础。
模长:勾股定理的高维推广
向量
这是勾股定理在
L1 范数:曼哈顿距离
除了
它的几何含义是沿坐标轴走的总路程。在曼哈顿这样的方格街道上,从一点到另一点的最短路径沿街道走(
空间两点间的距离公式
给定点
这个公式把两点距离与向量模长统一在一起。理解这一点的关键是:
向量夹角的定义域
两个非零向量
夹角的余弦值
方向余弦
向量与坐标轴正方向之间的夹角的余弦值,称为方向余弦(Direction Cosines)。对于向量
也就是说,方向余弦就是归一化后向量的各个分量。三个方向余弦满足恒等式
import numpy as np
v = np.array([3.0, 4.0, 12.0])
norm_v = np.linalg.norm(v) # 13.0
# 方向余弦
cos_alpha, cos_beta, cos_gamma = v / norm_v
print(f"cos α = {cos_alpha:.4f}") # 0.2308
print(f"cos β = {cos_beta:.4f}") # 0.3077
print(f"cos γ = {cos_gamma:.4f}") # 0.9231
# 验证恒等式
print(f"平方和 = {cos_alpha**2 + cos_beta**2 + cos_gamma**2:.4f}") # 1.00001.1.4 向量间的乘法:本节的核心
本节的核心,也是整个线性代数中容易被会用不会懂的部分。两种向量乘法——点积与叉积——分别从方向相似度和垂直方向生成两个角度刻画了向量之间的关系。理解它们的几何本质,比记住公式重要得多。
点积:代数定义与几何定义
点积(Dot Product),又称内积(Inner Product)或数量积(Scalar Product),是两个向量之间基础的一种乘法。它的代数定义是对应分量乘积之和:
注意点积的结果是一个标量(一个数)。这是数量积名称的由来。
点积的几何定义更加直观的阐述了这一点:
其中
代数定义与几何定义的等价性是线性代数的一个基本定理,它的证明依赖于余弦定理,这里不再展开。重要的是要建立代数与几何互推的双向直觉:看到
投影:点积的几何本质
点积的几何意义是投影。给定两个向量
标量投影(也叫投影长度)的公式是:
它表示
向量投影(Projection Vector)则把标量投影转化为一个向量——方向沿
推导过程非常自然:先求出标量投影
点积的运算律
点积满足三条重要的运算律,理解它们的几何含义比记住公式更重要。
交换律:
分配律:
数乘结合律:
柯西-施瓦茨不等式
点积几何定义的一个直接推论是柯西-施瓦茨不等式(Cauchy-Schwarz Inequality):
这个不等式看似抽象,但其几何解释直观:因为
柯西-施瓦茨不等式是数学中重要的不等式之一,它在泛函分析、概率论、量子力学中都有深远影响。在机器学习中,它是证明余弦相似度取值范围
利用点积判定正交
点积重要的应用之一是判定正交(垂直)关系。由几何定义
若
若
若
若
点积为零即正交这条性质是整个线性代数中高频使用的结论之一。它把几何垂直翻译成了代数零,使得判定垂直变成了一次简单的乘加运算。后续学习正交矩阵、Gram-Schmidt 正交化、QR 分解时,这条性质都会反复出现。
叉积:二阶与三阶
叉积(Cross Product),又称向量积(Vector Product),是仅在三维(及二维退化情形)中定义的运算。与点积不同,叉积的结果是一个向量,而非标量。
二维叉积(也叫二维外积)的结果是标量。对于
它的几何意义是两向量张成的平行四边形的有向面积——正负号表示
三维叉积的结果是向量。对于
这个行列式记法只是助记工具——第一行是基向量,第二行是
叉积的几何意义:法向量与面积
叉积重要的几何性质有两条:
第一,方向:
第二,模长:
叉积的运算律
叉积的运算律与点积有重要区别,需要特别注意。
反交换律(Anticommutativity):
分配律:
不满足结合律:
import numpy as np
u = np.array([1.0, 0.0, 0.0]) # x 方向单位向量
v = np.array([0.0, 1.0, 0.0]) # y 方向单位向量
# 叉积:x × y = z
cross = np.cross(u, v)
print(f"u × v = {cross}") # 输出 [0. 0. 1.],即 z 方向
# 反交换律验证
print(f"v × u = {np.cross(v, u)}") # 输出 [0. 0. -1.]
# 模长 = 平行四边形面积
area = np.linalg.norm(cross)
print(f"面积 = {area}") # 输出 1.0混合积:平行六面体的有向体积
把点积与叉积结合,就得到混合积(Scalar Triple Product):
混合积的几何意义很清晰——它等于三个向量张成的平行六面体的有向体积。叉积
混合积为零,当且仅当三个向量共面(它们张成的平行六面体压扁成平面,体积为零)。这是判定三向量共面的标准方法,也是后续理解行列式几何意义(行列式即体积)的入门。
1.1.5 向量的组合与空间的初步构建
本节是从单向量向向量空间过渡的桥梁。前面讨论的都是单个向量或两个向量之间的关系,从这里开始,我们要把视角提升到一组向量如何构成空间。这种视角的转换,是从算术进入代数的关键一步。
线性组合
给定一组向量
称为这些向量的线性组合(Linear Combination)。线性组合是线性代数最基础的结构——它把加法和数乘两种运算结合起来,构造出无穷多个新向量。
线性组合在工程中无处不在。在机器学习中,神经网络的一层就是输入特征的线性组合加上偏置;在信号处理中,傅里叶级数把任意信号表示为正弦波的线性组合;在统计学中,主成分分析把高维数据表示为若干主成分的线性组合。理解线性组合,就理解了线性代数的加法—数乘二件套如何在工程中应用。
张成:从向量到空间
把一个向量组的所有可能的线性组合构成的集合,称为这个向量组的张成空间(Span),记作
单个非零向量的张成是一条过原点的直线。因为
两个不共线向量的张成是一个过原点的平面。因为
三个不共面向量的张成是整个三维空间。因为三个独立方向足以够到空间中任何一点。如果三个向量共面,则张成退化为一张平面——它们提供不了第三个独立方向。
张成的直觉
张成回答了一个核心问题:用这些向量能走到哪些地方? 在二维平面中,单个向量只能让你在一条直线上移动;两个不共线向量能让你走到平面任何一点。向量组提供的独立方向数决定了张成空间的维度——这是后续秩概念的几何原型。
线性相关与线性无关
一个向量组如果存在一组不全为零的标量
则称这组向量线性相关(Linearly Dependent)。否则称为线性无关(Linearly Independent)。
线性相关的几何直觉是:至少有一个向量可以表示为其他向量的线性组合——它在某种意义上是多余的,去掉它不会减少张成空间。线性无关则意味着每个向量都提供了独立的方向贡献,缺一不可。
- 两个向量共线(一个能表示为另一个的数倍)→ 线性相关
- 三个向量共面(一个能表示为另两个的线性组合)→ 线性相关
- 向量组线性无关 → 每个向量都指出一个新的方向
共线定理与共面定理
共线定理:两个向量
共面向量定理:三个向量
这两条定理在解析几何中频繁使用——判断空间中三点是否共线、四点是否共面、直线与平面是否平行,都是共线/共面判定。它们也是后续学习线性方程组解的结构和矩阵的秩的几何入口。
import numpy as np
# 共线判定
u = np.array([1.0, 2.0, 3.0])
v = np.array([2.0, 4.0, 6.0]) # u 的 2 倍,共线
print(f"u × v = {np.cross(u, v)}") # 输出 [0. 0. 0.],共线判定通过
# 共面判定
a = np.array([1.0, 0.0, 0.0])
b = np.array([0.0, 1.0, 0.0])
c = np.array([1.0, 1.0, 0.0]) # a + b,与 a, b 共面
mixed = np.dot(a, np.cross(b, c))
print(f"混合积 = {mixed}") # 输出 0.0,共面判定通过
# 线性无关判定(通过矩阵秩)
import numpy.linalg as la
M = np.column_stack([a, b, np.array([0.0, 0.0, 1.0])])
rank = la.matrix_rank(M)
print(f"秩 = {rank}") # 输出 3,三个向量线性无关1.1.6 交互演示:把抽象公式变成可操作对象
下面这个 3D 交互演示把本节的核心概念——向量的模长、点积、投影、夹角——全部集中在一个场景中。你可以拖动滑块调整两个向量
- 两个向量的箭头方向与长度
- 它们的夹角
的弧度与角度 在 上的投影(绿色虚线) - 点积
的数值变化
建议实验:
- 把
与 调到同一方向(如 , ),观察点积——此时 ,点积等于两模长之积。 - 把
调到与 垂直(如 , ),观察点积——此时 ,点积为零。 - 把
调到与 反向(如 , ),观察点积——此时 ,点积为负。 - 观察投影开关打开时,投影向量的长度如何随夹角变化。
本节小结
本节从向量的几何本质(有向线段)与代数本质(有序数对)出发,建立了代数—几何双向直觉。加法、数乘是后续一切线性结构的源头;模长、距离、夹角提供了向量的度量;点积把方向相似度压缩成一个数,叉积则从两个向量生成垂直方向;线性组合、张成、线性相关则是从个体向量过渡到向量空间的桥梁。掌握这些概念,就为后续学习矩阵、线性变换、特征值打下了坚实基础。
练习题
第 1 题 概念推导
设
参考答案
标量投影为
分母出现
第 2 题 代码验证
利用本节的 <VectorDemo> 交互组件,取
参考答案
第 3 题 概念推导
设
参考答案
常见错误
错误 1 · 把零向量的方向说成任意方向
原因:零向量
解决:明确零向量没有方向这一结论,凡涉及归一化、方向角、单位向量的运算都先排除
错误 2 · 行向量与列向量混用导致矩阵乘法维度不匹配
原因:默认列向量
解决:在每段推导开头明确约定向量取向(本教程默认列向量),涉及转置时显式写出 v.reshape(-1, 1) 或 v[:, None] 强制列向量形状,避免一维数组的歧义。
错误 3 · 把点积结果当作向量,或把叉积结果当作标量
原因:点积
解决:记忆点积出标量、叉积出向量这条结果类型规则;在运算前先核对结果维度,若题目要求面积则对叉积再取模长
错误 4 · 用叉积为零判定任意维向量的共线
原因:叉积仅在二维(退化形式)与三维中有定义。面对
解决:高维情形改用对应分量比例相等或秩判据:构造矩阵