Numpy的随机数例程使用a的组合产生伪随机数,BitGenerator
以创建序列,并Generator
使用a的序列从不同的统计分布中采样:
BitGenerators:生成随机数的对象。这些通常是无符号整数字,填充有32或64个随机位的序列。
生成器:将来自BitGenerator的随机位序列转换为在指定时间间隔内遵循特定概率分布(例如均匀,正态或二项式)的数字序列的对象。
从Numpy版本1.17.0开始,可以使用许多不同的BitGenerators初始化Generator。它揭示了许多不同的概率分布。有关更新的随机Numpy数例程的上下文,请参见NEP 19。传统RandomState
随机数例程仍然可用,但仅限于单个BitGenerator。
为了方便和向后兼容,将单个RandomState
实例的方法导入numpy.random命名空间,有关完整列表,请参见
旧式随机生成。
调用default_rng
以获取的新实例Generator
,然后调用其方法以从不同的分布中获取样本。默认情况下,
Generator
使用提供的位PCG64
具有比中MT19937
使用的旧版更好的统计属性RandomState
。
# Do this
from numpy.random import default_rng
rng = default_rng()
vals = rng.standard_normal(10)
more_vals = rng.standard_normal(10)
# instead of this
from numpy import random
vals = random.standard_normal(10)
more_vals = random.standard_normal(10)
Generator
可以代替RandomState
。两个类实例都拥有一个内部BitGenerator
实例来提供位流,可以通过访问该实例gen.bit_generator
。某些API逾期未完成的清理意味着已从中删除了旧方法和兼容性方法
Generator
笔记 |
||
|
|
兼容于 |
|
||
|
|
添加一个 |
|
||
|
已移除 |
采用 |
|
已移除 |
有关更多信息,请参见“新增功能或不同之处 ”
在理解接口略有不同的前提下,可以使用类似于以下代码的代码来同时支持RandomState
和Generator
。
try:
rg_integers = rg.integers
except AttributeError:
rg_integers = rg.randint
a = rg_integers(1000)
种子可以传递给任何BitGenerator。通过提供的值进行混合,SeedSequence
以将可能的种子序列分布在BitGenerator的更大范围的初始化状态中。在这里PCG64
使用并用包裹Generator
。
from numpy.random import Generator, PCG64
rg = Generator(PCG64(12345))
rg.standard_normal()
新的基础结构采用了不同的方法从RandomState
对象生成随机数。随机数生成分为两个部分,即位生成器和随机生成器。
该BitGenerator
有一组有限的责任。它管理状态并提供产生随机双精度数和随机无符号32位和64位值的功能。
的取位发生器提供的流,并将它们转换成更加有用的分布,例如,模拟正常的随机值。这种结构允许使用很少的代码重复就可以使用备用位发生器。random generator
的Generator
是面向用户的对象,它是几乎相同的
RandomState
。初始化生成器的规范方法将
PCG64
位生成器作为唯一参数。
from numpy.random import default_rng
rg = default_rng(12345)
rg.random()
一个人也可以Generator
直接BitGenerator
实例化一个实例。要使用较旧的MT19937
算法,可以直接实例化并将其传递给Generator
。
from numpy.random import Generator, MT19937
rg = Generator(MT19937(12345))
rg.random()
警告
用于生成NumPy法线的Box-Muller方法在中不再可用Generator
。使用Generator不能为正态分布或依赖于正态的任何其他分布(例如RandomState.gamma
or)
重现精确的随机值RandomState.standard_t
。如果您需要按位向后兼容的流,请使用RandomState
。
Generator的常规,指数和伽马函数使用256步Ziggurat方法,比NumPy的Box-Muller或CDF逆实现快2-10倍。
可选dtype
参数,它接受np.float32
或np.float64
产生用于选择分布的单或双预均匀一致随机变量
可选out
参数,允许为选择分布填充现有数组
所有BitGenerator都可以通过CTypes(PCG64.ctypes
)和CFFI(PCG64.cffi
)生成double,uint64和uint32 。这允许在numba中使用位生成器。
比特发生器可以通过Cython在下游项目中使用 。
Generator.integers
现在是从离散均匀分布生成整数随机数的规范方法。该rand
和
randn
方法只能通过遗产RandomState
。的endpoint
关键字可以被用来指定打开或关闭的时间间隔。这将替换randint
和不推荐使用的random_integers
。
Generator.random
现在是生成浮点随机数的规范方法,它替换了RandomState.random_sample
,
RandomState.sample和RandomState.ranf。这与Python的一致random.random
。
numpy中的所有BitGenerator都SeedSequence
用于将种子转换为初始化状态。
有关与传统相比改进和差异的完整列表,请参见“新增功能或不同之处” Randomstate
。
该软件包独立于NumPy开发,并已集成到1.17.0版中。原始存储库位于https://github.com/bashtage/randomgen。