1. 向量基础概念与表示方法
在数学和物理学中,向量是最基础也是最重要的概念之一。它不仅能表示大小,还能表示方向,这使得向量成为描述物理世界各种现象的强大工具。
1.1 向量的几何表示
在几何空间中,向量通常用带箭头的线段表示。这个箭头的长度代表向量的大小(模),而箭头的方向则代表向量的方向。这种表示方法非常直观,特别是在描述力、速度、加速度等物理量时特别有用。
在实际绘图中,我们通常从坐标系原点出发画向量。例如,在二维坐标系中,向量v=(3,4)就是从原点(0,0)指向点(3,4)的箭头。这种表示方法让我们能够直观地看到向量在空间中的位置和方向。
1.2 向量的坐标表示
在数学运算中,我们更常用坐标来表示向量。在二维空间中,一个向量可以表示为v=(x,y),其中x是水平方向的分量,y是垂直方向的分量。这种表示方法使得向量的各种运算变得非常方便。
向量的模(长度)计算公式为:
|v| = √(x² + y²)
在三维空间中,向量表示为v=(x,y,z),模长为:
|v| = √(x² + y² + z²)
对于n维空间中的向量v=(x₁,x₂,...,xₙ),其模长为:
|v| = √(x₁² + x₂² + ... + xₙ²)
注意:在实际编程计算中,特别是处理高维向量时,直接使用这个公式可能会导致数值不稳定。更好的做法是使用专门的线性代数库中的范数计算函数。
1.3 单位向量
单位向量是指模长为1的向量。任何非零向量都可以通过除以它的模长来得到对应的单位向量:
û = v / |v|
单位向量在表示方向时特别有用,因为它消除了大小的影响,只保留了方向信息。在后面的内容中我们会看到,这在计算相似度等应用中非常重要。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 向量的基本运算
2.1 向量加减法
向量加减法是向量运算中最基础的操作。设a=(x₁,y₁),b=(x₂,y₂),则:
a + b = (x₁+x₂, y₁+y₂)
a - b = (x₁-x₂, y₁-y₂)
从几何上看,向量加法可以用三角形法则或平行四边形法则来解释。简单来说,a+b就是从原点沿着a行进后,再沿着b行进得到的向量。
应用实例:力的合成
假设有两个力F₁=(3,4)和F₂=(1,2),它们的合力就是:
F = F₁ + F₂ = (3+1,4+2) = (4,6)
向量减法的几何意义可以理解为从b的终点指向a的终点的向量。这在计算相对运动时特别有用。
应用实例:相对速度计算
假设船的速度v_船=(8,0)(向东8m/s),水流速度v_水=(3,1)(向东3m/s,向北1m/s),那么船相对于水的速度就是:
v_相对 = v_船 - v_水 = (8-3,0-1) = (5,-1)
表示向东5m/s,向南1m/s。
2.2 向量数乘
除了加减法,向量还可以与标量(实数)相乘。设k是一个实数,v=(x,y),则:
k·v = (k·x, k·y)
数乘会改变向量的大小,但不改变其方向(k为负时方向相反)。这在物理中表示力的放大或缩小非常有用。
3. 向量的乘积运算
3.1 向量内积(点积)
向量的内积,也称为点积,是两个向量对应分量相乘后相加得到的标量值。设a=(x₁,y₁),b=(x₂,y₂),则:
a·b = x₁x₂ + y₁y₂
内积有重要的几何意义:
a·b = |a||b|cosθ
其中θ是两个向量的夹角。
从几何上看,内积可以理解为向量a在向量b方向上的投影长度乘以|b|。这个性质在很多应用中都非常重要。
内积的重要性质:
- 当两个向量垂直时,内积为0(因为cos90°=0)
- 当夹角小于90°时,内积为正
- 当夹角大于90°时,内积为负
- 内积在坐标旋转下保持不变
3.2 内积的应用:余弦相似度
内积在推荐系统中有着广泛的应用,特别是在计算相似度时。以商品推荐为例:
-
将商品特征表示为向量:
商品的各种属性(类别、品牌、价格、颜色等)可以量化为数值,组合成一个特征向量g=[x₁,x₂,...,xₙ] -
特征归一化:
由于不同特征的量纲不同,我们需要对向量进行L2归一化:
Xᵢ = xᵢ / √(x₁²+x₂²+...+xₙ²)
这样得到的单位向量G只保留了方向信息。 -
计算相似度:
两个商品G₁和G₂的相似度可以用它们的内积表示:
similarity = G₁·G₂ = cosθ
这就是所谓的"余弦相似度",它只比较向量的方向,忽略大小。
实操技巧:在实际应用中,我们通常会先建立特征向量数据库,然后使用高效的向量搜索算法(如KD树、局部敏感哈希等)来快速找到最相似的物品。
3.3 向量外积(叉积)
向量的外积,也称为叉积,是三维空间中特有的运算。设a=(x₁,y₁,z₁),b=(x₂,y₂,z₂),则:
a×b = (y₁z₂ - z₁y₂, z₁x₂ - x₁z₂, x₁y₂ - y₁x₂)
外积的结果是一个新的向量,它同时垂直于a和b,其方向由右手定则决定,大小等于|a||b|sinθ,几何上对应于a和b张成的平行四边形的面积。
外积的重要性质:
- 外积不满足交换律:a×b = -b×a
- 两个平行向量的外积为零向量
- 外积仅在三维空间中有明确定义
3.4 外积的应用:力矩计算
在物理学中,力矩(Torque)是外积的典型应用。力矩表示力使物体绕轴旋转的能力,计算公式为:
τ = r × F
其中r是从旋转中心到施力点的位置向量,F是作用力向量。
力矩的大小等于力的大小乘以力臂长度(|r|sinθ),方向表示旋转轴的方向。这在机械工程和结构分析中非常重要。
4. 向量运算的Python实现
现在让我们用Python的NumPy库来实现上述向量运算。NumPy是Python中用于科学计算的基础库,提供了高效的数组操作和线性代数函数。
4.1 基本向量运算实现
python复制import numpy as np
# 定义两个三维向量
a = np.array([3, 4, 0])
b = np.array([4, 0, 3])
# 向量加法
add = a + b
print("加法 a + b =", add) # 输出:[7 4 3]
# 向量减法
sub = a - b
print("减法 a - b =", sub) # 输出:[-1 4 -3]
# 向量内积(点积)
dot = np.dot(a, b)
print("内积 a · b =", dot) # 输出:12
# 向量归一化
a_norm = a / np.linalg.norm(a) # np.linalg.norm计算模长
b_norm = b / np.linalg.norm(b)
print("归一化后的 a =", a_norm) # 输出:[0.6 0.8 0. ]
print("归一化后的 b =", b_norm) # 输出:[0.8 0. 0.6]
# 余弦相似度
cos_sim = np.dot(a_norm, b_norm)
print("归一后的余弦相似度 =", cos_sim) # 输出:0.48
# 向量外积(叉积)
cross = np.cross(a, b)
print("外积 a × b =", cross) # 输出:[ 12 -9 -16]
4.2 实际应用示例
让我们实现一个简单的商品推荐系统,基于余弦相似度:
python复制import numpy as np
from sklearn.preprocessing import normalize
# 假设我们有5个商品,每个商品有3个特征
products = np.array([
[4, 2, 1], # 商品1
[1, 4, 2], # 商品2
[3, 1, 5], # 商品3
[2, 5, 1], # 商品4
[5, 1, 3] # 商品5
])
# 归一化特征向量
products_norm = normalize(products, axis=1, norm='l2')
# 选择目标商品(比如商品1)
target = products_norm[0]
# 计算与其他商品的相似度
similarities = np.dot(products_norm, target)
# 找出最相似的商品(排除自己)
most_similar = np.argsort(-similarities)[1] # [1]因为[0]是自己
print(f"与商品1最相似的是商品{most_similar+1}, 相似度={similarities[most_similar]:.2f}")
注意事项:在实际应用中,商品特征向量的构建非常关键。通常我们会使用更复杂的特征工程方法,甚至使用深度学习模型来提取特征。此外,对于大规模商品库,需要使用更高效的相似度搜索算法。
5. 向量运算的常见问题与解决
5.1 数值稳定性问题
在高维向量运算中,特别是涉及归一化时,可能会出现数值不稳定的情况。例如,计算模长时如果向量元素非常小或非常大,可能会导致溢出或精度丢失。
解决方案:
- 使用专门的数学库(如NumPy)提供的范数计算函数
- 在必要时对数据进行标准化处理(减去均值,除以标准差)
- 使用对数空间进行计算(对于某些特定应用)
5.2 高维向量外积问题
如前所述,外积只在三维空间中有明确定义。在更高维空间中,我们需要使用其他方法来描述"垂直"的概念。
解决方案:
- 使用楔积(Wedge Product)或外代数(Exterior Algebra)的概念
- 对于n维空间中的m个向量,它们的外积对应于一个m-向量
- 在实际应用中,通常使用矩阵的行列式或子空间的概念来处理
5.3 余弦相似度的局限性
虽然余弦相似度在很多应用中表现良好,但它也有一些局限性:
- 只考虑方向不考虑大小,有时会丢失重要信息
- 在高维空间中,随机向量的余弦相似度可能集中在0附近(维度诅咒)
改进方法:
- 结合欧氏距离等其他相似度度量
- 使用降维技术(如PCA)减少维度
- 对特定应用设计定制化的相似度度量
6. 向量运算的高级应用
6.1 在机器学习中的应用
向量运算是机器学习的基础。例如:
- 神经网络中的权重就是向量
- 支持向量机使用向量内积来定义决策边界
- 聚类算法(如K-means)依赖于向量距离的计算
6.2 在计算机图形学中的应用
向量运算在图形学中无处不在:
- 3D模型的旋转、缩放和平移都是通过向量运算实现的
- 光照计算使用向量点积来计算光线与表面的夹角
- 碰撞检测依赖于向量叉积来判断几何关系
6.3 在物理学模拟中的应用
物理引擎大量使用向量运算:
- 力的合成与分解
- 刚体动力学中的力矩计算
- 流体动力学中的速度场表示
在实际编程中,理解这些向量运算的原理和实现方式,能够帮助我们写出更高效、更准确的代码。特别是在科学计算、机器学习和图形学等领域,向量运算的优化往往能带来显著的性能提升。
