趋近智
本课程已归档: 现已推出包含更新教学大纲和改进内容的新版本。
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×10=10, 2×20=40, 3×30=90, 4×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×10=10, 2×10=20, 3×10=30, 4×10=40。
幂运算 (**)
将每个元素进行幂运算。
# 将每个元素平方
pow_scalar = array_a ** 2
print("元素平方:", pow_scalar)
Output:
Square elements: [ 1 4 9 16]
说明: 12=1, 22=4, 32=9, 42=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]
实际上,这些算术运算符通常是 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 数组上,对于稍后实现更复杂的算法非常重要。
这部分内容有帮助吗?
© 2026 ApX Machine Learning用心打造