Python 教程

21.3 通用函数与广播机制

Python通用函数与广播机制入门教程

Python 教程

本教程详细讲解Python中NumPy的通用函数和广播机制,帮助初学者轻松理解数组操作的核心概念,并附有简单易懂的代码示例。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

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:如果两个数组的维度数不同,小维度数组的形状会在前面补 1。例如,一个形状为 (3,) 的数组可以与形状为 (2,3) 的数组广播。
  2. 规则 2:在任一维度上,如果大小相等或其中一个为 1,则可以进行广播。例如,形状为 (1,3) 和 (2,3) 的数组可以广播。
  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 学习有所帮助!

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包