NumPy 随机种子(生成可预测的随机数)

2023-10-23

在计算科学中,随机种子是生成的伪随机数序列的起点。

这些数字看似随机,但它们遵循确定性序列。种子决定了该序列的初始状态。
在 Python 中NumPy 库,您可以使用设置随机种子numpy.random.seed()功能。这将使随机数生成的输出可预测且可再现。

 

 

伪随机数与真随机数

随机数大致可分为两类:伪随机数和真随机数。

伪随机数

伪随机数是使用确定性算法生成的。给定相同的初始种子,它们每次都会产生相同的数字序列。

伪随机数的生成效率很高,适合大多数应用,包括模拟和统计采样。

真随机数

真正的随机数是从根本上随机的物理过程生成的。

它们是不可预测的,也不遵循算法。真正的随机数通常用于不可预测性至关重要的加密应用中。
在 Python 中,可以使用专用硬件或在线服务获得真正的随机数,但它们超出了本教程的范围。

 

如何在 NumPy 中设置随机种子?

您使用numpy.random.seed()函数并提供一个将用作种子的整数。
这是一个例子:


import numpy as np
np.random.seed(5)
print(np.random.rand())
  

Output:


0.22199317108973948
  

在此代码中,随机种子设置为 5。每次运行此代码时,生成的随机浮点将是相同的。

您可以将种子更改为任何整数以生成不同的随机数序列,但特定种子对应的序列将始终相同。

 

为什么使用随机种子?

使用随机数时,一致性和可重复性至关重要,尤其是在科学计算、模拟或机器学习任务中。

通过使用随机种子,您可以确保每次运行代码时生成的随机数都是相同的。
这是一个简单的演示:
无需播种:


import numpy as np
random_numbers_without_seed = [np.random.rand() for _ in range(5)]
print(random_numbers_without_seed)
  

Output:


[0.9507143064099162, 0.7319939418114051, 0.5986584841970366, 0.15601864044243652, 0.15599452033620265]
  

与播种:


np.random.seed(42)
random_numbers_with_seed = [np.random.rand() for _ in range(5)]
print(random_numbers_with_seed)
  

Output:


[0.3745401188473625, 0.9507143064099162, 0.7319939418114051, 0.5986584841970366, 0.15601864044243652]
  

在第一个代码片段中,如果没有设置种子,每次运行代码时随机数都会不同。

在第二个片段中,我们将种子设置为 42,每次运行时数字都将相同。

这允许以其他人可以精确复制的方式测试、验证和共享您的代码。

 

如何设置全局随机种子?

在 NumPy 中设置全局随机种子会影响库中的所有随机数生成函数。它是使涉及随机过程的代码可重现的重要工具。
这是一个例子:


import numpy as np

np.random.seed(42)
print(np.random.rand())
print(np.random.randint(10, 20))
  

Output:


0.3745401188473625
17
  

通过将种子设置为 42,每次代码运行时生成的随机浮点数和随机整数都将相同。

这演示了设置全局种子如何影响 NumPy 中的所有随机函数。

受影响的功能示例

NumPy 中的全局随机种子会影响生成随机数或执行随机操作的各种函数。

以下是其中一些函数的示例。

rand

生成 0 到 1 之间的随机浮点数:


import numpy as np
np.random.seed(0)
print(np.random.rand(3))
  

Output:


[0.5488135  0.71518937 0.60276338]
  

randint

生成指定范围内的随机整数:


np.random.seed(0)
print(np.random.randint(1, 10, 3))
  

Output:


[6 1 4]
  

shuffle

随机打乱数组的元素:


np.random.seed(0)
arr = [1, 2, 3, 4, 5]
np.random.shuffle(arr)
print(arr)
  

Output:


[3, 1, 2, 4, 5]
  

这些函数中的每一个都受到全局种子的影响,并且设置种子可确保结果在代码的不同运行中保持一致。

 

播种的最佳实践

在代码的早期设置种子

在代码或需要可重现随机数的函数的开头设置种子。这可确保序列正确初始化。

选择任意种子值与确定性种子

任意种子值都会产生特定的随机数序列。

也可以使用确定性种子,例如使用当前日期,但它们不能确保不同运行或机器之间的可重复性。

管理种子以实现代码执行的可重复性

记录代码中使用的种子值非常重要,以确保其他人可以重现准确的结果。

这是显示最佳实践的代码片段:


import numpy as np

# Set the seed early
seed_value = 42
np.random.seed(seed_value)
random_numbers = np.random.rand(3)
print(f"Seed: {seed_value}")
print(f"Random Numbers: {random_numbers}")
  

Output:


Seed: 42
Random Numbers: [0.37454012 0.95071431 0.73199394]
  

这些实践确保您的代码的随机过程对于您和可能使用您的代码的其他人来说都是透明的、受控的和可重现的。

 

实施具有可重现结果的模拟

在实现需要随机数生成的模拟时,重现结果通常至关重要。

使用固定种子是实现这一目标的关键。
下面是一个简单的蒙特卡罗模拟示例,用于估计 π 的值:


import numpy as np
np.random.seed(0)
num_points = 10000
inside_circle = 0
for _ in range(num_points):
    x, y = np.random.rand(2)
    if x**2 + y**2 <= 1:
        inside_circle += 1
estimated_pi = (inside_circle / num_points) * 4
print("Estimated π:", estimated_pi)
  

Output:


Estimated π: 3.1428
  

通过在模拟开始时设置种子,您可以确保每次运行结果都是一致的。

这使您可以比较更改,验证您的模拟,并充满信心地分享它,以便其他人获得相同的结果。

 

资源

https://numpy.org/doc/stable/reference/random/ generated/numpy.random.seed.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NumPy 随机种子(生成可预测的随机数) 的相关文章

随机推荐

  • 编辑 crontab 文件的要点

    在系统管理领域 有一种强大的工具可以让您高效地安排任务 crontab 使用 crontab 您可以在指定的日期和时间执行脚本和命令 这使其成为基于 Unix 的系统中非常有用的实用程序 但是 要充分利用其潜力 您需要了解编辑 cronta
  • 如何在 Linux 中创建交换文件

    交换文件是 Linux 操作系统的重要组件 它通过提供额外的虚拟内存来帮助提高性能 它是在系统物理内存 RAM 填满时保留用作虚拟内存的磁盘空间 在 Linux 中创建交换文件有助于防止系统崩溃和不稳定 在本文中 我们将逐步讨论如何在 Li
  • 如何在 phpMyAdmin 中添加多个主机

    phpMyAdmin 默认配置仅允许连接到本地 MySQL 服务器 但是如果我们运行多个数据库服务器 那么如果我们可以从单个 phpMyAdmin 安装中选择需要连接的服务器 那就太好了 本操作指南将帮助您在 phpMyAdmin 中添加多
  • Bash 选择(制作菜单)

    在本教程中 我们将介绍以下基础知识select在 Bash 中构建 The select构造允许您生成菜单 Bash select构造 The select构造从项目列表生成菜单 它的语法几乎与for loop select ITEM in
  • 如何在 CentOS 7 上安装和配置 Redmine

    Redmine 是最流行的开源项目管理和问题跟踪软件工具之一 它是跨平台和跨数据库的 构建在 Ruby on Rails 框架之上 Redmine包括对多个项目 wiki 问题跟踪系统 论坛 日历 电子邮件通知等的支持 在本教程中 我们将介
  • 如何在 Ubuntu 18.04 上部署 Rocket.Chat

    Rocket Chat 是一个开源团队交流平台 是自托管的 Slack 替代品 它使用 Meteor 框架开发 提供各种功能 包括帮助台聊天 文件共享 视频会议 语音消息 API 等 对于想要托管自己的聊天系统的公司和社区来说 Rocket
  • .bashrc 与 .bash_profile

    如果您在命令行上花费大量时间 您很可能想要自定义您的 shell 环境 这可能意味着创建别名 将新目录添加到 PATH 或更改 shell 提示符的外观 您可能遇到过一些教程 其中他们说将您的配置放在 bashrc bash profile
  • 如何在 CentOS 7 上安装和使用 PHP Composer

    Composer是 PHP 的依赖管理器 类似于Node js 的 npm or Python 的点子 Composer 将提取您的项目所依赖的所有必需的 PHP 包并为您管理它们 它用于所有现代 PHP 框架和平台 例如 Laravel
  • 如何在 CentOS 8 上安装 Apache

    Apache HTTP 服务器是世界上使用最广泛的 Web 服务器 它是一个免费 开源 跨平台的HTTP服务器 具有强大的功能 并且可以通过多种模块进行扩展 在本文中 我们将解释如何在 CentOS 8 上安装和管理 Apache Web
  • 如何在 Debian 9 上安装 CouchDB

    CouchDB 是一个开源的容错且无模式的 NoSQL 数据库 由 Apache 软件基金会维护 CouchDB 服务器将其数据存储在命名数据库中 其中包含以下文档JSON结构 每个文档由许多字段和附件组成 字段可以包括文本 数字 列表 布
  • 如何在 CentOS 7 上安装 Visual Studio Code

    视觉工作室代码是微软开发的开源跨平台代码编辑器 它有一个内置的调试支持 嵌入式Git控制 语法突出显示 代码完成 集成终端 代码重构和片段 在 CentOS 计算机上安装 Visual Studio Code 最简单且推荐的方法是启用 VS
  • 如何在 Ubuntu 18.04 上安装 Mono

    Mono 是一个用于开发和运行基于 ECMA ISO 标准的跨平台应用程序的平台 它是 Microsoft NET 框架的免费开源实现 本教程介绍如何在 Ubuntu 18 04 上安装 Mono 先决条件 这些说明假定您以 root 身份
  • Linux中的su命令(切换用户)

    The su 替代或切换用户的缩写 实用程序允许您使用其他用户 默认为 root 用户 的权限运行命令 Using su是在当前登录会话中切换到管理帐户的最简单方法 当不允许 root 用户通过以下方式登录系统时 这尤其方便ssh或使用 G
  • Linux 中的Whereis命令

    whereis是一个命令行实用程序 允许您查找给定命令的二进制文件 源文件和手册页文件的位置 在这篇文章中 我们将向您展示如何使用Linuxwhereis命令 如何使用whereis命令 语法为whereis命令如下 whereis OPT
  • 在 CentOS 8 上使用 Let's Encrypt 保护 Nginx

    Let s Encrypt 是由互联网安全研究小组 ISRG 开发的免费 自动化 开放的证书颁发机构 提供免费的 SSL 证书 Let s Encrypt 颁发的证书受到所有主要浏览器的信任 并且自颁发之日起 90 天内有效 在本教程中 我
  • Expect 命令以及如何像魔术一样自动化 shell 脚本

    在上一篇文章中 我们讨论了写作实用的shell脚本 我们看到了编写 shell 脚本是多么容易 今天我们要讨论一个对 shell 脚本有神奇作用的工具 该工具是期待命令 or 期待脚本语言 Expect 命令或 Expect 脚本语言是一种
  • SSH 连接被拒绝(原因和解决方案)

    本教程将介绍您在使用 SSH 时可能遇到的最常见错误 连接被拒绝 请继续阅读 详细了解这个问题及其各种解决方案 Secure Shell SSH 是系统管理员最常用的工具之一 它对于管理所有服务器和执行日常任务至关重要 目录 hide 1
  • Linux env 命令:深入了解 Linux 环境管理

    The envLinux中的命令用于显示或设置环境变量 它可用于在修改后的环境中运行程序或显示当前环境 在本教程中 我们将深入研究其各种论点 并揭示其与脚本的集成 目录 hide 1 参数概览 2 执行不带参数的 env 命令 3 使用 e
  • 揭示 Linux 虚拟文件系统的强大功能

    Linux 虚拟文件系统或虚拟文件系统通常是位于实际文件系统之上的一层 它允许用户访问不同类型的文件系统 可以将虚拟文件系统视为内核与实际文件系统之间的接口 这意味着您将在 etc fstab 文件中找不到这些 Linux 虚拟文件系统的任
  • NumPy 随机种子(生成可预测的随机数)

    在计算科学中 随机种子是生成的伪随机数序列的起点 这些数字看似随机 但它们遵循确定性序列 种子决定了该序列的初始状态 在 Python 中NumPy 库 您可以使用设置随机种子numpy random seed 功能 这将使随机数生成的输出