7.1 随机数生成器的概念


文档摘要

7.1 随机数生成器的概念 第七章:NumPy 随机数生成 ( 模块) 7.1 随机数生成器的概念 在科学计算、模拟、机器学习和数据分析等领域,随机数扮演着至关重要的角色。NumPy 提供了强大的随机数生成功能,通过 模块实现。理解随机数生成器的概念是有效使用这些功能的基础。 7.1.1 伪随机数 计算机生成的随机数实际上是伪随机数。这意味着它们不是真正意义上的随机,而是通过确定性的算法产生的。这些算法从一个初始值(称为种子)开始,通过一系列数学运算生成看起来随机的数字序列。 伪随机数生成器 (PRNG) 的优点是: 可重复性: 给定相同的种子,PRNG 将始终生成相同的数字序列。这对于调试和复现实验结果至关重要。 效率: PRNG 的计算速度通常很快,可以高效地生成大量的随机数。 7.1.

7.1 随机数生成器的概念

第七章:NumPy 随机数生成 (np.random 模块)

7.1 随机数生成器的概念

在科学计算、模拟、机器学习和数据分析等领域,随机数扮演着至关重要的角色。NumPy 提供了强大的随机数生成功能,通过 np.random 模块实现。理解随机数生成器的概念是有效使用这些功能的基础。

7.1.1 伪随机数

计算机生成的随机数实际上是伪随机数。这意味着它们不是真正意义上的随机,而是通过确定性的算法产生的。这些算法从一个初始值(称为种子)开始,通过一系列数学运算生成看起来随机的数字序列。

伪随机数生成器 (PRNG) 的优点是:

  • 可重复性: 给定相同的种子,PRNG 将始终生成相同的数字序列。这对于调试和复现实验结果至关重要。

  • 效率: PRNG 的计算速度通常很快,可以高效地生成大量的随机数。

7.1.2 随机数生成器的类型

NumPy 提供了多种随机数生成器,每种生成器都有其自身的特点和适用场景。NumPy 1.17 版本引入了新的随机数生成器系统,基于 Generator 类。老的 RandomState 仍然可用,但推荐使用新的 Generator

  • numpy.random.Generator 这是推荐的随机数生成器。它使用更现代的算法,例如 PCG64,提供了更好的统计特性和性能。

  • numpy.random.RandomState 这是较旧的随机数生成器。虽然仍然可用,但建议迁移到 Generator

7.1.3 种子 (Seed)

种子是 PRNG 的初始值。通过设置种子,可以确保每次运行程序时生成相同的随机数序列。这在需要可重复性的情况下非常有用。

7.1.4 使用 Generator 生成随机数

以下是使用 Generator 生成随机数的示例:

import numpy as np # 创建一个 Generator 实例,使用默认的 PCG64 算法 rng = np.random.default_rng() # 生成一个 0 到 1 之间的随机数 random_number = rng.random() print(f"Random number: {random_number}") # 生成一个包含 5 个 0 到 1 之间的随机数的数组 random_array = rng.random(5) print(f"Random array: {random_array}") # 生成一个 3x3 的 0 到 1 之间的随机数矩阵 random_matrix = rng.random((3, 3)) print(f"Random matrix:\n{random_matrix}") # 设置种子 rng = np.random.default_rng(seed=42) random_number_seeded = rng.random() print(f"Seeded random number: {random_number_seeded}") rng = np.random.default_rng(seed=42) random_number_seeded_again = rng.random() print(f"Seeded random number again: {random_number_seeded_again}")

代码解释:

  1. rng = np.random.default_rng(): 创建一个 Generator 实例。default_rng() 返回一个新的 Generator 实例,使用默认的 PCG64 算法。

  2. rng.random(): 生成一个 0 到 1 之间的均匀分布的随机数。

  3. rng.random(5): 生成一个包含 5 个 0 到 1 之间的随机数的 NumPy 数组。

  4. rng.random((3, 3)): 生成一个 3x3 的随机数矩阵。

  5. rng = np.random.default_rng(seed=42): 创建一个 Generator 实例,并设置种子为 42。

  6. 连续两次使用相同的种子,生成相同的随机数。

7.1.5 使用 RandomState 生成随机数

虽然推荐使用 Generator,但了解 RandomState 仍然很重要,因为你可能会在旧代码中遇到它。

import numpy as np # 创建一个 RandomState 实例 rs = np.random.RandomState() # 生成一个 0 到 1 之间的随机数 random_number = rs.rand() print(f"Random number: {random_number}") # 生成一个包含 5 个 0 到 1 之间的随机数的数组 random_array = rs.rand(5) print(f"Random array: {random_array}") # 生成一个 3x3 的 0 到 1 之间的随机数矩阵 random_matrix = rs.rand(3, 3) print(f"Random matrix:\n{random_matrix}") # 设置种子 rs = np.random.RandomState(seed=42) random_number_seeded = rs.rand() print(f"Seeded random number: {random_number_seeded}") rs = np.random.RandomState(seed=42) random_number_seeded_again = rs.rand() print(f"Seeded random number again: {random_number_seeded_again}")

代码解释:

  1. rs = np.random.RandomState(): 创建一个 RandomState 实例。

  2. rs.rand(): 生成一个 0 到 1 之间的均匀分布的随机数。

  3. rs.rand(5): 生成一个包含 5 个 0 到 1 之间的随机数的 NumPy 数组。

  4. rs.rand(3, 3): 生成一个 3x3 的随机数矩阵。

  5. rs = np.random.RandomState(seed=42): 创建一个 RandomState 实例,并设置种子为 42。

  6. 连续两次使用相同的种子,生成相同的随机数。

7.1.6 选择合适的随机数生成器

  • 对于新的项目,强烈建议使用 Generator

  • 如果需要与旧代码兼容,可以使用 RandomState

  • 如果需要更高的统计质量,可以考虑使用不同的 Generator 算法,例如 MT19937。

7.1.7 随机数生成器的状态

随机数生成器维护一个内部状态,该状态决定了下一个生成的随机数。这意味着,每次调用生成器时,其状态都会更新。

7.1.8 随机数生成器的应用

随机数生成器在许多领域都有广泛的应用,包括:

  • 模拟: 模拟物理系统、金融市场等。

  • 机器学习: 初始化模型参数、分割数据集、随机森林等。

  • 统计: 蒙特卡罗方法、bootstrap 抽样等。

  • 游戏开发: 生成随机事件、控制 NPC 行为等。

7.1.9 Mermaid 图表

以下是一个使用 Mermaid 绘制的图表,展示了随机数生成器的概念:

图表解释:

  1. 种子 (Seed): 随机数生成器的起始值。

  2. 随机数生成器 (PRNG): 使用种子和算法生成随机数的引擎。

  3. 内部状态: 随机数生成器内部维护的状态,影响后续生成的随机数。

  4. 随机数: 生成的伪随机数。

  5. 应用: 随机数在各种领域中的应用。

7.1.10 总结

理解 NumPy 随机数生成器的概念对于有效使用 np.random 模块至关重要。通过选择合适的生成器、设置种子并了解其内部状态,可以生成高质量的随机数,并将其应用于各种科学计算和数据分析任务中。 建议使用新的 Generator 类,因为它提供了更好的性能和统计特性。 通过设置种子,可以实现可重复的随机数序列,这对于调试和复现实验结果非常重要。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U