21.3 通用函数与广播机制
Python通用函数与广播机制入门教程
本教程详细讲解Python中NumPy的通用函数和广播机制,帮助初学者轻松理解数组操作的核心概念,并附有简单易懂的代码示例。
推荐工具
Python 通用函数与广播机制详解
引言
在数据科学、机器学习和科学计算中,Python 的 NumPy 库是处理数组数据的核心工具。通用函数(Universal Functions,简称 ufuncs)和广播机制(Broadcasting)是 NumPy 中两个关键概念,它们能高效地进行数组操作,让代码更简洁、性能更高。本教程将从零开始介绍这些概念,适合初学者学习。
什么是通用函数(Universal Functions)
通用函数是 NumPy 中用于对数组进行元素级操作的函数。它们可以在整个数组上执行运算,无需使用循环,从而提升计算效率。
常见通用函数
- 数学运算:
np.add(加法)、np.subtract(减法)、np.multiply(乘法)、np.divide(除法) - 三角函数:
np.sin(正弦)、np.cos(余弦) - 指数和对数:
np.exp(指数)、np.log(自然对数) - 通用函数通常是矢量化的,支持多种数据类型。
示例代码
import numpy as np
# 创建两个数组
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
# 使用通用函数进行加法
c = np.add(a, b)
print("加法结果:", c) # 输出: [5 7 9]
# 使用减法
d = np.subtract(b, a)
print("减法结果:", d) # 输出: [3 3 3]
什么是广播机制(Broadcasting)
广播机制允许 NumPy 对不同形状的数组进行算术运算。它通过自动扩展较小维度的数组来匹配较大维度的数组,而无需显式复制数据。
广播规则
- 规则 1:如果两个数组的维度数不同,小维度数组的形状会在前面补 1。例如,一个形状为 (3,) 的数组可以与形状为 (2,3) 的数组广播。
- 规则 2:在任一维度上,如果大小相等或其中一个为 1,则可以进行广播。例如,形状为 (1,3) 和 (2,3) 的数组可以广播。
- 广播后,数组进行元素级运算,结果数组的形状由输入数组的最大形状决定。
示例代码
# 广播示例
a = np.array([[1, 2, 3], [4, 5, 6]]) # 形状 (2, 3)
b = np.array([10, 20, 30]) # 形状 (3,)
# 广播 b 到 a 的形状,然后相加
c = a + b # 等价于 np.add(a, b) 并利用广播
print("广播加法结果:")
print(c) # 输出: [[11 22 33] [14 25 36]]
# 另一个示例:标量广播
d = np.array([1, 2, 3])
e = 5 # 标量,形状可以视为 (1,)
f = d * e # 广播标量到数组形状
print("标量广播乘法结果:", f) # 输出: [5 10 15]
结合通用函数与广播
通用函数和广播机制经常一起使用,以实现灵活的数组操作。例如,您可以使用通用函数来执行数学运算,同时利用广播处理不同形状的数组。
结合示例
# 使用通用函数和广播
a = np.array([1, 2, 3]) # 形状 (3,)
b = np.array([[4], [5]]) # 形状 (2, 1)
# 广播 a 和 b 进行乘法
# a 广播到 (2,3), b 广播到 (2,3)
c = np.multiply(a, b) # 等价于 a * b
print("结合通用函数和广播的结果:")
print(c) # 输出: [[4 8 12] [5 10 15]]
总结
通用函数和广播机制是 NumPy 中高效数组操作的基础。通过通用函数,您可以轻松进行元素级运算;通过广播机制,您可以处理不同形状的数组,而无需额外代码。掌握这些概念将帮助您在数据分析和科学计算中编写更简洁、高效的代码。
下一步学习建议
- 实践更多 NumPy 通用函数,如
np.sqrt(平方根)、np.power(幂运算)。 - 深入了解广播规则,尝试处理更高维度的数组。
- 探索 NumPy 官方文档以获取更多高级功能。
希望本教程对您的 Python 学习有所帮助!
开发工具推荐