10·数学基础入门

向量运算:加法、点积与范数

mathlinear-algebra

第 10 课 - 向量运算:加法、点积与范数

1. 学习目标

完成本课学习后,你将能够:

  • 理解向量加法的直观含义与代数计算方法。
  • 掌握向量点积(内积)的计算方法,并理解其几何意义。
  • 学会计算向量的不同范数(如 L1 范数、L2 范数),并知道它们的应用场景。
  • 运用 NumPy 等工具在 Python 中实践向量运算。

2. 核心概念

2.1 向量加法:把事情“叠加”起来

想象一下,你从家走到超市是一个位移向量 A,从超市走到图书馆是另一个位移向量 B。那么,从家直接到图书馆的位移,就是这两个向量相加的结果 A + B

在数学上,向量加法非常简单:将对应位置的元素相加。 C = A + B 意味着 C[i] = A[i] + B[i]

2.2 向量点积:衡量“相似性”与“投影”

点积(内积)是向量运算中最重要的一个,它有两种等效的理解方式:

代数视角(计算公式): A · B = A[0]*B[0] + A[1]*B[1] + ... + A[n-1]*B[n-1] 简单来说,就是“先乘后加”。

几何视角(深层含义): A · B = |A| * |B| * cos(θ) 其中 |A||B| 是向量的长度(模),θ 是它们之间的夹角。

  • 如果点积为,说明两向量大致指向同一方向(夹角 < 90°)。
  • 如果点积为,说明两向量大致指向相反方向(夹角 > 90°)。
  • 如果点积为,说明两向量垂直

在机器学习中,点积常用于计算相似度(如余弦相似度)、神经网络中的权重求和、以及寻找向量在某个方向上的投影长度。

2.3 向量范数:衡量“长度”或“距离”

范数是将向量映射为一个非负实数的函数,可以理解为向量的“大小”或“长度”。最常用的有两种:

  • L1 范数 (曼哈顿距离)||A||₁ = |A[0]| + |A[1]| + ... + |A[n-1]|。想象在城市街区里,你只能横平竖直地走,两点间的距离就是 L1 距离。
  • L2 范数 (欧几里得距离)||A||₂ = √(A[0]² + A[1]² + ... + A[n-1]²)。这就是我们最熟悉的直线距离。

在机器学习中,L2 范数常用于正则化(防止模型过拟合),L1 范数则因其能产生稀疏解而被用于特征选择。

3. 代码示例

我们将使用 Python 的 NumPy 库来完成所有向量运算。请确保已安装 (pip install numpy)。

import numpy as np

# 创建两个向量
vec_a = np.array([3, 4])
vec_b = np.array([1, 2])

# --- 向量加法 ---
vec_sum = vec_a + vec_b
print("向量加法: A + B =", vec_sum)  # 输出: [4 6]

# --- 向量点积 ---
# 方法1:使用NumPy的dot函数(推荐)
dot_product_np = np.dot(vec_a, vec_b)
print("点积 (NumPy):", dot_product_np)  # 输出: 11

# 方法2:手动计算(理解原理)
dot_product_manual = np.sum(vec_a * vec_b) # 元素对应相乘,然后求和
print("点积 (手动):", dot_product_manual)  # 输出: 11

# 从几何角度验证
norm_a = np.linalg.norm(vec_a)  # 计算A的L2范数(长度)
norm_b = np.linalg.norm(vec_b)  # 计算B的L2范数
cos_theta = dot_product_np / (norm_a * norm_b)
theta = np.arccos(cos_theta)  # 计算夹角(弧度)
print(f"向量夹角 (弧度): {theta:.2f}, (角度): {np.degrees(theta):.2f}°")

# --- 向量范数 ---
# L1 范数
norm_l1_a = np.linalg.norm(vec_a, ord=1)
print("A的L1范数:", norm_l1_a)  # 输出: 7.0

# L2 范数 (默认)
norm_l2_a = np.linalg.norm(vec_a)  # ord=2 是默认值
print("A的L2范数:", norm_l2_a)  # 输出: 5.0

# 计算两个向量间的距离(L2范数)
distance = np.linalg.norm(vec_a - vec_b)
print("A与B的L2距离:", distance)  # 输出: 2.828... (√8)

4. 实践练习

练习 1:基础加法与点积

给定向量 u = [2, 5, 1]v = [1, 3, 7]

  1. 计算 u + v
  2. 计算 u · v
  3. 计算向量 u 的 L1 范数和 L2 范数。

预期输出:

[3 8 8]
24
8.0, 5.477...

练习 2:点积与角度

给定向量 x = [1, 0]y = [0, 1]

  1. 计算 x · y
  2. 根据点积结果,判断这两个向量是否垂直?为什么?
  3. 使用 np.dotnp.linalg.norm 计算它们夹角的余弦值(cos θ),验证你的判断。

预期输出:

0
是,因为点积为0,根据几何意义,夹角为90度。
0.0

练习 3:综合应用

创建一个函数 vector_info(vec),输入一个向量,返回一个包含以下信息的字典: {‘length’ (L2范数), ‘unit_vector’ (单位向量,即方向相同长度为1的向量), ‘norm_l1’ (L1范数)}。 (提示:单位向量 = 原向量 / 原向量的L2范数)。

示例: vector_info([3, 4]) 应返回 {'length': 5.0, 'unit_vector': array([0.6, 0.8]), 'norm_l1': 7.0}

5. 常见错误

  1. 维度不匹配:进行向量加法或点积时,必须确保两个向量长度相同。NumPy 会尝试广播,但初学者应先明确维度。
  2. 混淆点积和逐元素乘法np.dot(a, b)a * b 完全不同。前者返回一个标量,后者返回一个新向量。
  3. 混淆范数类型:在需要 L2 范数(如计算梯度大小)时错误地使用了 L1 范数,会导致不同性质的结果。明确 ord 参数。
  4. 忽略点积的几何意义:仅仅把它当作一个计算公式,而忘记它能反映向量间的相似性和方向关系,这会限制你对许多算法(如SVM, KNN)的理解。

6. 小结

本课我们学习了向量三种最核心的运算:

  • 向量加法:对应元素相加,表示位移或状态的叠加。
  • 向量点积:对应元素相乘再求和,其值与向量的长度和夹角相关,是衡量相似性和进行投影的关键工具。
  • 向量范数:衡量向量“大小”的指标,L1 范数(曼哈顿距离)和 L2 范数(欧氏距离)是最常用的两种。

熟练掌握这些基本运算,是理解后续更复杂的矩阵运算、优化算法和许多机器学习模型原理的数学基石。在下一课中,我们将把这些概念扩展到矩阵上。

练习编辑器

rust
Loading...

继续学习

完成本课后,建议继续学习下一课「矩阵运算:乘法、转置与逆矩阵」 以巩固所学知识。