向量不仅可以表示一组有序数值,还可以通过加法、减法和标量乘法组合成新的向量。这些基本运算构成了线性代数计算的起点,也是特征融合、参数更新和向量插值的基础。
向量加法、减法和标量乘法都可以按照对应分量计算。它们不同于点积、外积和矩阵乘法:向量加减得到向量,标量与向量相乘仍得到向量;多个向量经过缩放后相加,则形成线性组合。
一、向量运算的基本条件
设两个 n 维实向量为:
向量加法和减法要求两个向量具有相同的维数,也就是对应位置的分量能够一一配对。
例如,三维向量可以与另一个三维向量相加:
但三维向量不能直接与二维向量相加:
这是因为两者的分量数量不同,无法建立完整的对应关系。
二、向量加法
1、对应分量相加
两个同维向量相加,就是把对应位置的分量分别相加:
例如:
则:
向量相加后,结果仍然是同一空间中的 n 维向量。
2、向量加法的几何意义
在几何中,可以先沿向量 u 移动,再沿向量 v 移动。最终从起点指向终点的向量,就是 u + v。
也可以把 u 和 v 作为平行四边形的两条邻边,其对角线表示向量和。这说明向量加法不仅是分量计算,也表示多个方向上的位移合成。
三、向量减法
1、对应分量相减
两个同维向量相减,就是把对应位置的分量分别相减:
对于前面的两个向量:
2、减法与相反向量
向量 v 的相反向量为:
因此,向量减法可以转化为加法:
从几何上看,如果 u 和 v 表示从同一原点出发的两个位置向量,那么 u − v 表示从 v 的终点指向 u 的终点的向量。
四、向量的标量乘法
1、向量数乘
向量的标量乘法(Scalar Multiplication),简称向量数乘,是用同一个标量乘以向量的每个分量。
设 c ∈ ℝ,则:
例如:
当 c = 2 时:
当 c = −1 时:
2、标量对方向和大小的影响
对于非零向量 u,标量 c 对其几何形式的影响如下:
• c > 0 时,结果与原向量方向相同
• c < 0 时,结果与原向量方向相反
• |c| > 1 时,向量被放大
• 0 < |c| < 1 时,向量被缩小
当 c = 0 时,结果为零向量。n 维零向量可以写成:
并且:
五、线性组合
1、两个向量的线性组合
将向量分别乘以标量,再把结果相加,就得到向量的线性组合(Linear Combination)。
设 a、b ∈ ℝ,则:
其中,a 和 b 称为线性组合的系数(Coefficient)。
例如:
取 a = 2、b = −1:
线性组合的结果仍然是与原向量同维的向量。
2、多个向量的线性组合
对于 k 个 n 维向量 v₁、v₂、…、vₖ,以及标量 c₁、c₂、…、cₖ,可以写成:
也可以使用求和符号表示:
每个向量先由对应系数缩放,再把所有结果相加。
线性组合描述的是如何利用已有向量构造新向量。关于向量能够生成多大范围、是否存在冗余以及能否作为一组基,将在后续相关主题中进一步讨论。
六、向量运算的基本性质
设 u、v、w ∈ ℝⁿ,c、d ∈ ℝ。
1、向量加法的性质
交换律:
结合律:
零向量:
相反向量:
2、标量乘法的性质
对向量加法的分配律:
对标量加法的分配律:
标量乘法的结合律:
单位标量:
这些性质保证了向量加法和标量乘法可以按照普通代数规则进行整理与组合。
七、使用 Python 进行向量运算
1、使用 Python 列表计算
Python 列表本身不支持数学意义上的逐分量加法。可以使用内置函数 zip() 配对对应元素:
u = [2, -1, 3]v = [1, 4, -2]if len(u) != len(v): raise ValueError("两个向量的长度必须相同")vector_sum = [a + b for a, b in zip(u, v)]vector_difference = [a - b for a, b in zip(u, v)]scaled_vector = [2 * a for a in u]print(vector_sum)print(vector_difference)print(scaled_vector)
输出:
[3, 3, 1][1, -5, 5][4, -2, 6]
这里需要先检查长度,因为 zip() 在输入长度不同时会以较短的序列为准,可能隐藏维数不一致的问题。
2、使用 NumPy 数组计算
NumPy 数组可以直接进行逐分量加法、减法和标量乘法:
import numpy as npu = np.array([2, -1, 3])v = np.array([1, 4, -2])vector_sum = u + vvector_difference = u - vscaled_vector = 2 * ulinear_combination = 2 * u - vprint(vector_sum)print(vector_difference)print(scaled_vector)print(linear_combination)
输出:
[3 3 1][ 1 -5 5][ 4 -2 6][ 3 -6 8]
这里的 + 和 - 按照对应分量计算,标量与数组之间的 * 表示每个分量都乘以同一个标量。
表达式:
就是一个线性组合,其中 2 和 −1 分别是向量 u 和 v 的组合系数。
更多向量的线性组合仍然遵循相同规则:先用各自的系数缩放向量,再将结果相加。批量向量的高效计算将在后续矩阵运算中展开。
八、线性组合的基础应用
1、加权组合、仿射组合与凸组合
给定两个同维向量 u 和 v,可以通过不同系数组成:
这仍然是线性组合。
在数据处理和 AI 编程中,当系数表示不同向量的相对作用时,也常称为权重(Weight),相应的结果称为加权组合(Weighted Combination)。
当系数满足:
即,当所有组合系数之和为 1 时,所得结果称为仿射组合(Affine Combination)。
若同时满足:
即,所有系数非负且系数之和为 1,则称为凸组合(Convex Combination)。
令:
可以得到:
当:
并把 u 和 v 看作两个点的位置向量时,这种凸组合称为线性插值(Linear Interpolation)。向量 w 的终点位于 u 和 v 的终点之间的线段上。
例如:
则:
使用 NumPy 可以写成:
import numpy as npu = np.array([0.0, 2.0])v = np.array([4.0, 6.0])t = 0.25w = (1 - t) * u + t * vprint(w)
输出:
这种加权组合可以用于位置插值、参数平滑和特征融合。具体含义取决于向量所表示的数据。
若 t < 0 或 t > 1,向量 w 的终点仍位于经过 u 和 v 终点的直线上,但处于二者之间的线段之外,这种计算通常称为线性外推(Linear Extrapolation)。
2、参数更新
许多优化过程都包含标量乘法和向量减法。参数向量可以沿某个方向进行调整:
其中:
θ 是当前参数向量;
g 是用于确定调整方向的向量;在优化问题中,它常取为梯度;
η 是控制更新幅度的标量。
例如:
theta = np.array([1.0, -2.0, 0.5])g = np.array([0.2, -0.4, 0.1])eta = 0.1theta_new = theta - eta * gprint(theta_new)
输出:
这一过程先用 η 缩放向量 g,再从当前参数 θ 中减去缩放后的结果,因此参数的实际变化量为 −ηg。
九、常见问题及使用建议
1、Python 列表的 + 不是向量加法
对于:
u = [1, 2]v = [3, 4]print(u + v)
输出为:
列表的 + 表示拼接,不是逐分量相加。
同样:
输出为:
列表乘以整数表示重复,不是向量数乘。
2、注意 NumPy 广播产生的形状
一维数组和二维列结构相加时,NumPy 可能通过广播生成二维结果:
u = np.array([1, 2, 3])column = np.array([ [1], [2], [3]])result = u + columnprint(result)print(result.shape)
输出:
[[2 3 4] [3 4 5] [4 5 6]](3, 3)
NumPy 会根据广播规则处理不同形状的数组。形状 (3,) 与 (3,1) 相加会得到 (3,3),并不是两个三维向量的标准加法。广播规则将在后续文章中系统讲解。
3、不要把所有线性组合都理解为插值
线性组合的系数可以取任意实数。
仿射组合要求所有系数之和为 1;凸组合还要求各系数大于或等于 0。只有形如:
时,才表示 u 和 v 之间的线性插值。
📘 小结
向量加减按对应分量计算,标量乘法统一缩放各分量。多个同维向量经过系数缩放后相加,构成线性组合。使用 Python 实现时,应区分列表操作与 NumPy 数组运算,并检查向量维数和数组形状。