Python 的 NumPy 库是进行机器学习任务中向量运算的常用工具。提供实际例子,帮助你熟练地在代码中进行这些向量运算。首先,请确保你已安装 NumPy 并将其导入。通常的做法是将其导入为别名 np。import numpy as np表示向量如前所述,我们在 NumPy 中使用一维数组来表示向量。让我们创建几个向量来进行操作。# 创建两个向量 v = np.array([1, 2, 3]) w = np.array([4, 5, 6]) print("向量 v:", v) print("向量 w:", w)这创建了两个向量:$v = [1, 2, 3]$ 和 $w = [4, 5, 6]$。向量加法和减法在 NumPy 中进行向量加法或减法很简单,并且是按元素执行的,如同其数学定义一样。# 向量加法 vector_sum = v + w print("v + w =", vector_sum) # 向量减法 vector_diff = v - w print("v - w =", vector_diff)输出显示了 $[1+4, 2+5, 3+6]$ 和 $[1-4, 2-5, 3-6]$ 的结果。NumPy 会自动处理按元素进行的运算。标量乘法将向量乘以标量(单个数字)也很简单。向量的每个元素都将乘以该标量。# 定义一个标量 s = 2 # 标量乘法 scaled_v = s * v print(f"{s} * v =", scaled_v) scaled_w = w * 0.5 print(f"0.5 * w =", scaled_w)这里,向量 v 乘以 2,结果为 $[21, 22, 2*3] = [2, 4, 6]$。向量 w 乘以 0.5。向量范数:衡量长度NumPy 的 linalg 子模块有计算向量范数的功能。最常用的范数是 $L_2$ 范数(欧几里得距离)和 $L_1$ 范数(曼哈顿距离)。向量 $x = [x_1, x_2, ..., x_n]$ 的 $L_2$ 范数计算方式如下: $$||x||2 = \sqrt{\sum{i=1}^{n} x_i^2}$$$L_1$ 范数的计算方式如下: $$||x||1 = \sum{i=1}^{n} |x_i|$$# 计算 L2 范数(默认) norm_v_l2 = np.linalg.norm(v) print(f"v 的 L2 范数: {norm_v_l2:.4f}") # 格式化为4位小数 # 计算 L1 范数 norm_v_l1 = np.linalg.norm(v, ord=1) print(f"v 的 L1 范数: {norm_v_l1}") # 计算 w 的 L2 范数 norm_w_l2 = np.linalg.norm(w) print(f"w 的 L2 范数: {norm_w_l2:.4f}") # 计算 w 的 L1 范数 norm_w_l1 = np.linalg.norm(w, ord=1) print(f"w 的 L1 范数: {norm_w_l1}")np.linalg.norm 函数默认计算 $L_2$ 范数。要计算 $L_1$ 范数,我们需指定 ord=1。对于 $v = [1, 2, 3]$: $L_2$ 范数 $= \sqrt{1^2 + 2^2 + 3^2} = \sqrt{1 + 4 + 9} = \sqrt{14} \approx 3.7417$ $L_1$ 范数 $= |1| + |2| + |3| = 1 + 2 + 3 = 6$代码输出与这些计算结果相符。点积两个向量 $v = [v_1, v_2, ..., v_n]$ 和 $w = [w_1, w_2, ..., w_n]$ 的点积计算方式如下: $$v \cdot w = \sum_{i=1}^{n} v_i w_i$$NumPy 有多种方法来计算点积。# 方法 1:使用 np.dot() dot_product_np_dot = np.dot(v, w) print(f"使用 np.dot(v, w) 的点积: {dot_product_np_dot}") # 方法 2:使用 @ 运算符(Python 3.5+ 推荐) # 此运算符专门用于矩阵/向量乘法 dot_product_at = v @ w print(f"使用 v @ w 的点积: {dot_product_at}") # 方法 3:使用 NumPy 数组的 .dot() 方法 dot_product_method = v.dot(w) print(f"使用 NumPy 数组的 .dot() 方法的点积: {dot_product_method}") 对于 $v = [1, 2, 3]$ 和 $w = [4, 5, 6]$ 的点积,这三种方法都得到相同的结果: $v \cdot w = (14) + (25) + (3*6) = 4 + 10 + 18 = 32$在现代 Python 代码中,@ 运算符常常更受青睐,因为它清晰地将点积与按元素乘法(*)区分开来。本动手实践部分演示了如何将我们学习的向量运算转化为可运行的 NumPy 代码。你现在可以创建向量、进行加法、缩放、测量其长度并计算点积。这些运算是许多机器学习算法的基本组成部分。在接下来的章节中,我们会将这些概念扩展到矩阵。