numpy1.25官方API References中文翻译(Random模块)

主要是翻译了numpy官网的API Reference中的random模块:numpy参考手册(random模块)链接

快速开始

numpy.random模块实现了伪随机数生成器(pseudo-random number generators:简称PRNGs或RNGs),并具有从各种概率分布中抽取样本的能力。通常,用户可使用default_rng创建一个Gernerate实例,然后调用它的各种方法,从不同的概率分布中获取样本。

import numpy as np
rng = np.random.default_rng()
# 在[0, 1)上生成一个服从均匀分布的随机浮点数样本
rng.random()  
# 0.06369197489564249  # 结果可能不同
# 创建一个大小为10的数组,其元素值服从标准高斯分布
rng.standard_normal(10)  
# array([-0.31018314, -1.8922078 , -0.3628523 , -0.63526532,  0.43181166,  # 结果可能不同
#        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])  # 结果可能不同

我们的随机数生成器(RNGs)是确定性序列,并且可以通过指定一个种子整数来重现它的初始状态。默认情况下,如果不提供种子,default_rng将从操作系统中的非确定性数据中获取种子,因此每次生成的随机数序列是不同的。伪随机序列在实际应用中是独立的,至少对于我们最初设计的伪随机性所适用的目的而言是如此。

注意:本模块实现的伪随机数生成器主要被设计应用于统计和仿真领域,不适合应用于安全和加密领域。如果用于安全和加密,请查看Python标准库中的secrets模块。

种子最好是一个很大的正整数。但default_rng依然可以使用任意大小的正整数。我们建议使用很大的、独一的数字,确保你的种子和别人的不同。这样可以确保你的结果和别人的结果在统计学上是独立的,除非你想重现别人的结果。可以使用secrets.randbits模块方便地获取一个任意大小的128位整数。

import secrets
import numpy as np
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模块以及相关基础支持代码已经在Numpy1.17.0版本中引入。但还有很多项目使用了旧版本的RandomState模块和numpy.random中的函数。虽然暂时没有计划移除旧版本的模块,但我们建议大家尽可能转为Generator模块。该算法更快,弹性更强,未来还有更多的改进。大部分情况下,Generator模块可以替换RandomState。查看传统随机数生成器,了解传统随机数生成机制; What’s New or Different,了解边关变动;查看NEP 19,了解转换到新模块的原因。

设计

用户主要和Generator模块实例交互,每个Generator示例包含一个BitGenerator实例(该实例实现了RNG的核心算法)。BitGenerator实例担负了有限的职责,它管理状态,并提供了创建随机双精度浮点数、无符号32位/64位随机整数的功能。

Generator 模块使用bit generator 提供的位流,并将他们转换为更多有用的概率分布,比如仿真正态分布。这个机制允许在少量重复代码的情况下,选择不同的bit generators。

Numpy实现了一些不同的BitGenerator类,用于实现不同的伪随机数生成算法。default_rng当前使用PCG64作为默认的BitGenerator。相比传统的基于MT19937算法的RandomState,它具有更好的统计属性和性能。

default_rng和BitGenerator将种子转换为RNG状态的工作委托给SeedSequence内部。SeedSequence使用了一个复杂的算法,成为用户输入和每个BitGenerator的实现细节(每个都需要大量不同的位来表示其状态)之间的中间人。重要的是,它让你可以使用任意大小的整数和以这些整数组成的任意序列,混合在一起变成RNG状态。当构造一个弹性的并行RNG流模板时,这是一个相当有用的原语。

为了后向兼容,我们仍然保留了传统的RandomState类。它继续默认使用MT19937算法,而且旧的种子仍然可以重现出相同的结果。

(未完待续)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值