在数学和物理学中,向量是最基础也是最重要的概念之一。不同于标量只有大小,向量同时具备大小和方向两个属性。这种双重特性使得向量能够完美描述现实世界中的许多物理量,比如力、速度、加速度等。
向量的表示方法主要有两种:几何表示和坐标表示。几何表示中,我们用一个带箭头的线段来表示向量,线段的长度代表向量的大小(模),箭头指向代表向量的方向。而在坐标表示中,我们使用一组有序的数字来描述向量。
在二维空间中,一个向量可以表示为:
→v = (x, y)
其中x表示水平方向分量,y表示竖直方向分量。这种表示方法非常直观,我们可以直接在坐标系中绘制出这个向量。
三维空间中的向量表示则增加了一个z轴分量:
→v = (x, y, z)
这可以描述我们现实世界中的三维物体运动或受力情况。
对于更一般的n维空间,向量表示为:
→v = (x₁, x₂, ..., xn)
这在机器学习、数据分析等领域非常常见,每个维度可能代表一个不同的特征。
向量的模长(或称范数)表示向量的大小。计算模长的公式本质上是勾股定理在多维空间的推广。
二维向量模长:
|→v| = √(x² + y²)
三维向量模长:
|→v| = √(x² + y² + z²)
n维向量模长:
|→v| = √(x₁² + x₂² + ... + xn²)
模长计算在实际应用中非常重要,比如在物理学中计算力的大小,在机器学习中进行特征归一化等。
注意:在编程实现模长计算时,要注意数值溢出问题。当向量维度很高或分量值很大时,直接平方求和可能导致数值溢出。可以使用一些数值稳定的计算方法,如先找到绝对值最大的分量,将所有分量除以此最大值后再计算。
向量加减法是向量运算中最基础的操作,遵循分量对应相加减的原则。
设两个二维向量:
→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) N
→F₂ = (1, 2) N
合力为:
→F = →F₁ + →F₂ = (3+1, 4+2) = (4, 6) N
这意味着物体受到一个水平方向4N,竖直方向6N的合力作用。
在航行问题中,向量减法特别有用。考虑一艘船在水流中航行:
船速:→v船 = (8, 0) m/s(向东)
水流速:→v水 = (3, 1) m/s(向东3m/s,向北1m/s)
船相对于水的速度为:
→v相对 = →v船 - →v水 = (8-3, 0-1) = (5, -1) m/s
这表示船相对于水以5m/s向东、1m/s向南的速度航行。
向量内积,也称点积,是向量运算中极其重要的操作,在机器学习、计算机图形学等领域应用广泛。
对于两个向量:
→a = (x₁, y₁)
→b = (x₂, y₂)
内积定义为:
→a · →b = x₁x₂ + y₁y₂
几何解释:
→a · →b = |→a||→b|cosθ
其中θ是两个向量的夹角。
这个几何解释揭示了内积的本质:它衡量了两个向量的"方向一致性"。当两个向量方向相同时,内积最大;垂直时为0;相反时最小。
在电商推荐系统中,常用余弦相似度来衡量商品间的相似性。具体实现步骤如下:
商品特征向量化:
→g = [x类目, x品牌, x价格, x尺寸, x颜色, x图谱特征...]
特征归一化(L2归一化):
Xk = xk / √(x₁² + x₂² + ... + xn²)
计算余弦相似度:
similarity = →G₁ · →G₂
归一化后,向量模长为1,余弦相似度简化为点积,仅比较特征分布模式,忽略绝对值大小的影响。
实操技巧:在大规模推荐系统中,可以使用近似最近邻(ANN)算法来高效计算高维向量的相似度,如Facebook的Faiss库或Google的ScANN。
向量外积是另一种重要的向量运算,主要应用于三维空间。
对于三维向量:
→a = (x₁, y₁, z₁)
→b = (x₂, y₂, z₂)
外积结果为:
→a × →b = (y₁z₂ - z₁y₂, z₁x₂ - x₁z₂, x₁y₂ - y₁x₂)
外积结果是一个新的向量,其:
重要性质:
在物理学中,力矩(Torque)描述力使物体旋转的能力,计算公式为:
→τ = →r × →F
其中:
力矩的大小表示旋转的强度,方向表示旋转轴的方向(右手定则)。
例如,用扳手拧螺丝时:
在实际工程应用中,我们通常使用数值计算库来实现向量运算,下面以Python的NumPy库为例。
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
# L2归一化
a_norm = a / np.linalg.norm(a)
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]
python复制# 不推荐的方式
result = [np.dot(x, y) for x, y in zip(vectors1, vectors2)]
# 推荐的方式
result = np.einsum('ij,ij->i', vectors1, vectors2)
内存布局:注意数组的内存布局(C顺序 vs Fortran顺序),对大规模运算性能影响显著。
使用专业库:对于超大规模向量运算,可以考虑使用CuPy(GPU加速)或分布式计算框架。
在机器学习中,我们经常需要处理数百甚至数千维的向量。此时需要注意:
维度灾难:随着维度增加,向量间距离变得难以区分,所有点对的距离趋于相同。
稀疏向量:许多特征向量是稀疏的(大部分元素为零),应使用稀疏矩阵存储和计算。
降维技术:PCA、t-SNE等方法可将高维向量降至2-3维可视化。
浮点精度问题:
python复制# 比较浮点数是否相等应使用小量容差
def almost_equal(a, b, tol=1e-8):
return np.abs(a - b) < tol
零向量归一化:
python复制# 安全的归一化函数
def safe_normalize(v):
norm = np.linalg.norm(v)
return v / norm if norm > 0 else v
外积的维度限制:NumPy的cross函数只支持2D和3D向量,更高维度需要自定义实现。
嵌入层(Embedding):将离散特征映射为连续向量空间。
注意力机制:通过向量点积计算注意力权重。
损失函数:如余弦相似度损失、三元组损失等。
梯度计算:反向传播本质上就是向量和矩阵的微分运算。
哈达玛积(Hadamard product):对应元素相乘,在NumPy中用*运算符实现。
张量积(Tensor product):生成高阶张量,在NumPy中用np.outer实现。
梯度:多元函数的梯度是一个向量,指向函数增长最快的方向。
散度:衡量向量场的"发散"程度。
旋度:衡量向量场的"旋转"程度。
书籍:
在线课程:
编程实践:
在实际工程应用中,向量运算几乎无处不在。从简单的物理模拟到复杂的深度学习模型,掌握向量运算的原理和实现技巧是每个工程师和科研人员的必备技能。建议读者通过实际项目来巩固这些概念,比如实现一个简单的推荐系统或物理引擎,在实践中深化理解。