快速开始#
numpy.random 模块实现了伪随机数生成器(简称 PRNG 或 RNG),能够从各种概率分布中抽取样本。通常,用户会使用 default_rng 创建一个 Generator 实例,并调用其各种方法以从不同分布中获取样本。
在浏览器中试用!
>>> import numpy as np
>>> rng = np.random.default_rng()
生成一个在范围 \([0, 1)\) 内均匀分布的随机浮点数
>>> rng.random()
0.06369197489564249 # may vary
根据单位高斯分布生成一个包含 10 个数字的数组
>>> rng.standard_normal(10)
array([-0.31018314, -1.8922078 , -0.3628523 , -0.63526532, 0.43181166, # may vary
0.51640373, 1.25693945, 0.07779185, 0.84090247, -2.13406828])
在范围 \([0, 10)\) 内均匀生成一个包含 5 个整数的数组
>>> rng.integers(low=0, high=10, size=5)
array([8, 7, 6, 2, 0]) # may vary
返回在新标签页中打开我们的 RNG 是确定性序列,可以通过指定一个种子整数来派生其初始状态,从而实现复现。默认情况下,如果没有提供种子,default_rng 将从操作系统的非确定性数据中为 RNG 播种,因此每次都会生成不同的数字。伪随机序列在所有实际用途中都将是独立的,至少对于我们的伪随机性最初表现良好的那些用途而言。
在浏览器中试用!
>>> import numpy as np
>>> rng1 = np.random.default_rng()
>>> rng1.random()
0.6596288841243357 # may vary
>>> rng2 = np.random.default_rng()
>>> rng2.random()
0.11885628817151628 # may vary
返回在新标签页中打开
警告
此模块中实现的伪随机数生成器设计用于统计建模和模拟。它们不适用于安全或加密目的。有关此类用例,请参阅标准库中的 secrets 模块。
种子应为大的正整数。default_rng 可以接受任意大小的正整数。我们建议使用非常大、唯一的数字,以确保您的种子与他人的不同。这是一个良好的实践,可以确保您的结果在统计学上独立于他人,除非您有意图地尝试复现他们的结果。获取此类种子数字的一种便捷方法是使用 secrets.randbits 来获取任意 128 位整数。
在浏览器中试用!
>>> import numpy as np
>>> import secrets
>>> secrets.randbits(128)
122807528840384100672342137672332424406 # may vary
>>> rng1 = np.random.default_rng(122807528840384100672342137672332424406)
>>> rng1.random()
0.5363922081269535
>>> rng2 = np.random.default_rng(122807528840384100672342137672332424406)
>>> rng2.random()
0.5363922081269535
返回在新标签页中打开有关在特殊场景中控制种子的更高级选项,请参阅 default_rng 和 SeedSequence 的文档。
Generator 及其相关基础设施是在 NumPy 1.17.0 版本中引入的。仍有大量代码使用旧版 RandomState 以及 numpy.random 中的函数。虽然目前没有计划移除它们,但我们建议您尽可能地过渡到 Generator 。这些算法更快、更灵活,并且未来将获得更多改进。在大多数情况下, Generator 可以作为 RandomState 的替代品。有关旧版基础设施的信息,请参阅 旧版随机生成 ;有关过渡的信息,请参阅 新特性或差异 ;有关过渡的一些原因,请参阅 NEP 19 。