NumPy 提供执行快速逐元素数学运算的强大功能。与标准 Python 列表不同,NumPy 允许直接对整个数组应用运算,而无需通常那样循环遍历元素来执行算术。这种方法不仅更简洁,而且速度明显更快,特别是对于大型数组,因为这些运算是在高度优化、底层代码(通常是 C 或 Fortran)中实现的。执行算术运算您可以直接将标准 Python 算术运算符用于 NumPy 数组。这些运算是逐元素应用的。两个数组之间的运算如果您在两个数组之间执行运算,NumPy 会将对应的元素配对并为每对执行计算。为了直接实现这一点,所涉及的数组通常需要具有相同的形状。我们来创建两个简单的数组进行操作:import numpy as np # 创建两个形状相同的数组 array_a = np.array([1, 2, 3, 4]) array_b = np.array([10, 20, 30, 40]) print("数组 A:", array_a) print("数组 B:", array_b)Output:Array A: [1 2 3 4] Array B: [10 20 30 40]现在,我们来执行一些基本运算:加法 (+)将 array_a 和 array_b 中对应的元素相加。# 逐元素相加 sum_array = array_a + array_b print("加法 (A + B):", sum_array)Output:Addition (A + B): [11 22 33 44]说明: $1+10=11$, $2+20=22$, $3+30=33$, $4+40=44$。减法 (-)从 array_a 中对应的元素中减去 array_b 的元素。# 逐元素相减 diff_array = array_a - array_b print("减法 (A - B):", diff_array)Output:Subtraction (A - B): [ -9 -18 -27 -36]说明: $1-10=-9$, $2-20=-18$, $3-30=-27$, $4-40=-36$。乘法 (*)将对应的元素相乘。请注意,这是逐元素乘法,而不是矩阵乘法(我们稍后会讲到)。# 逐元素相乘 prod_array = array_a * array_b print("乘法 (A * B):", prod_array)Output:Multiplication (A * B): [ 10 40 90 160]说明: $1 \times 10=10$, $2 \times 20=40$, $3 \times 30=90$, $4 \times 40=160$。除法 (/)将 array_a 的元素除以 array_b 中对应的元素。# 逐元素相除 div_array = array_a / array_b print("除法 (A / B):", div_array)Output:Division (A / B): [0.1 0.1 0.1 0.1]说明: $1/10=0.1$, $2/20=0.1$, $3/30=0.1$, $4/40=0.1$。这些运算也适用于多维数组,只要它们的形状匹配即可:# 2D 数组示例 matrix_c = np.array([[1, 2], [3, 4]]) matrix_d = np.array([[10, 20], [30, 40]]) print("\n矩阵 C:\n", matrix_c) print("矩阵 D:\n", matrix_d) sum_matrix = matrix_c + matrix_d print("\n加法 (C + D):\n", sum_matrix)Output:Matrix C: [[1 2] [3 4]] Matrix D: [[10 20] [30 40]] Addition (C + D): [[11 22] [33 44]]与标量的运算您还可以在 NumPy 数组和一个数字(标量)之间执行算术运算。NumPy 会高效地将此运算应用到数组中的每个元素。这是广播这种机制的一个简单例子,NumPy 会隐式地扩展标量以匹配数组的形状。我们再次使用 array_a: [1 2 3 4]加标量# 为每个元素加 5 add_scalar = array_a + 5 print("加 5:", add_scalar)Output:Add 5: [6 7 8 9]说明: $1+5=6$, $2+5=7$, $3+5=8$, $4+5=9$。乘以标量# 将每个元素乘以 10 mul_scalar = array_a * 10 print("乘以 10:", mul_scalar)Output:Multiply by 10: [10 20 30 40]说明: $1 \times 10=10$, $2 \times 10=20$, $3 \times 10=30$, $4 \times 10=40$。幂运算 (**)将每个元素进行幂运算。# 将每个元素平方 pow_scalar = array_a ** 2 print("元素平方:", pow_scalar)Output:Square elements: [ 1 4 9 16]说明: $1^2=1$, $2^2=4$, $3^2=9$, $4^2=16$。其他算术运算NumPy 还支持其他标准逐元素算术运算:整除 (//): 执行除法并将结果向下舍入到最接近的整数。取模 (%): 返回除法的余数。# 使用 array_a = [1 2 3 4] 和 array_e = [2 2 2 2] array_e = np.array([2, 2, 2, 2]) floor_div = array_a // array_e print("整除 (A // E):", floor_div) modulo = array_a % array_e print("取模 (A % E):", modulo) # 标量示例 floor_div_scalar = array_b // 15 # array_b = [10 20 30 40] print("整除 (B // 15):", floor_div_scalar)Output:Floor Division (A // E): [0 1 1 2] Modulo (A % E): [1 0 1 0] Floor Division (B // 15): [0 1 2 2]通用函数 (ufuncs)实际上,这些算术运算符通常是 NumPy 通用函数 (ufuncs) 的快捷方式。例如,array_a + array_b 等同于调用 np.add(array_a, array_b)。虽然为了可读性,在基本算术中使用运算符 (+, -, *, /) 很常见,但您也可能会遇到这些函数形式(np.add、np.subtract、np.multiply、np.divide、np.power 等)。NumPy 提供了一个功能丰富的 ufuncs 库,用于在数组上高效执行数学、三角、统计及其他运算。这些基本算术运算构成了您将在线性代数和机器学习中执行的许多数值计算的组成部分。熟练地将这些运算逐元素应用到 NumPy 数组上,对于稍后实现更复杂的算法非常重要。