简单随机数发生器

simplerandom的Python项目详细描述


简介

提供了 simplerandom 包,其中包含包含 各种简单伪随机数生成器的类。

一个模块提供python迭代器,它生成简单的无符号32位 与其c对应的整数相同。

另一个模块提供从类中子类的随机类 随机 在标准python库的 随机 模块中。

为什么要用这个包裹?这些随机数生成器非常简单, 有两个主要优点:

  • 很容易将它们移植到不同的平台和/或语言。它可以 有助于在多个 平台和/或语言。
  • 小型和简单的生成器更适合小型嵌入式 系统,具有有限的RAM和ROM。

(python simplerandom.iterators 模块)已创建。见:

< Buff行情> http://github.com/cmcqueen/simplerandom

算法

大多数算法都是从george marsaglia的两篇新闻组文章中获得的 [1] [2] 。但是,有些修改 制造的。从 [3] 中,可以看出 [1] 有缺陷,不应使用。它实际上没有 周期为2**32-1,如预期,但有64个不同的周期,有些周期非常 短期。2003年的SHR3非常相似,但是有两个班次 值已交换。它的周期为2**32-1(如预期)。

我们仍然发现kiss from [1] 非常有用,主要是因为它使用32位 mwc的计算,它更适合于小型嵌入式系统。 因此,我们定义了使用mwc的kiss,它基于 shr3来自 [2]

来自pierre l'ecuyer的组合lfsr (tausworth)lfsr113算法已经被 实施。

参考文献

< COL/> < COL/> <正文> < > <表>
[1]> < <1><1><1><1><1><1><1><1><1><1><1><1><1> 2>/a>, 6, 7
C:end的随机数,最后?
乔治·马尔萨格里亚
新闻组邮报,sci.stat.math and others,星期四,1999年1月21日
< COL/> < COL/> <正文> < > <表>
[2] < <1><1><1><1><1><1><1><1><1><1><1><1><1> 2 2>a> 3>/a>>, 6 7
乔治·马尔萨格里亚
新闻组POST,科学数学,2003年2月26日
< COL/> < COL/> <正文> < > <表>
[3]
格雷格·罗斯 高通公司
< COL/> < COL/> <正文> < > <表>
[4] 1 2
皮埃尔·莱克耶 《计算数学》,68225(1999),261–269。
< COL/> < COL/> <正文> < > <表>
[5] 1 2
皮埃尔·莱克耶
< COL/> < COL/> <正文> < > <表>

提供的模块

<表> < COLGROUP > < COL/> < COL/> <广告>
< /广告> <正文> < > <表>

提供随机数生成器

在simplerandom.iterators中,提供了以下伪随机数生成器:

<表> < COLGROUP > < COL/> < COL/> <广告> 发电机
< /广告> <正文> 亲吻 基斯2 < > <表>

这些生成器是无限长的python迭代器(它们从不提升 (停止迭代)。他们在 python 3.x)生成下一个随机整数。所有的发电机输出 32位无符号值,并在 初始化/设定种子。

在simplerandom.random中,提供了伪随机数生成器 与simplerandom.iterators中的名称相同,但是 生成器实现标准的python random.random api。每台发电机 在simplerandom.iterators中使用同名的迭代器来生成 用来产生随机浮点数的随机位。函数 (Python2.x)在所有情况下都是实现的,Python3.x也支持它, 即使 jumpahead() 已经从python 3.x中正式删除 随机的 API。

用法

迭代器

< Buff行情>
>>> import simplerandom.iterators as sri
>>> rng = sri.KISS(123958, 34987243, 3495825239, 2398172431)
>>> next(rng)
702862187L
>>> next(rng)
13888114L
>>> next(rng)
699722976L

随机类API

< Buff行情>
>>> import simplerandom.random as srr
>>> rng = srr.KISS(258725234)
>>> rng.random()
0.0925917826051541
>>> rng.random()
0.02901686453730415
>>> rng.random()
0.9024972981686489

支持的Python版本

目前它已经在ubuntu 13.0464位和 Windows XP 32位。它通过了 simplerandom.iterators.test 单元 测试,以及 simplerandom.random 的基本手动测试。多一点 需要完整的单元测试套件。

在ubuntu中,它已经在python 2.7和3.3上进行了测试,并且通过了测试。

在Windows中,它已经在Python2.6、2.7、3.1、3.2和3.3上进行了测试。它 在这些版本下传递。

cython的使用

cython用于快速实现simplerandom.iterators。 cython创建一个可以编译成python二进制文件的 .c 文件。 扩展模块。

simplerandom的源分发包包含一个 .c 文件 是用cython创建的,因此不必将cython安装到 安装simplerandom

如果要修改cython,还包括cython .pyx 文件。 源代码,在这种情况下,您需要安装cython。但通过 默认情况下, setup.py .c 文件构建扩展名(以确保 生成不会由于特定的cython版本问题而失败)。如果你 要使用包含的 .pyx 文件中的cython进行构建,必须设置 在setup.py中使用cython=true

安装

simplerandom包是使用distutils安装的。如果你有工具 已安装以构建python扩展模块,请运行以下命令:

python setup.py install

如果不能构建c扩展,可以只安装纯python 实现,使用以下命令:

python setup.py build_py install --skip-build

单元测试

迭代器的单元测试在 simplerandom.iterators.test 中。它 复制原始新闻组文章中给出的c算法的测试 [1] ,以及其他单元测试。

运行单元测试:

python -m simplerandom.iterators.test

需要更彻底的单元测试套件。的单元测试套件 需要simplerandom.random

许可证

代码是根据麻省理工学院的许可证发布的。有关详细信息,请参阅license.txt。

[6] 1 2
p.l'ecuyer
《计算数学》,65213(1996),203–213。
模块 说明
simplerandom.迭代器 迭代器类,生成无符号32位整数。
简单随机 符合标准python random.random api的类。
注释
mwc1 两个32位MWC组合。从 [1]
mwc2 与mwc1非常相似,但稍加修改以改善其统计特性。
cong [2]
shr3 [2]
mwc64 单64位乘法与进位运算。从 [2]
MWC2、CONG和SHR3的组合。基于 [1] 但使用 [2] 中的cong和shr3,以及修改后的MWC。
MWC64、CONG和SHR3的组合。从 [2]
lfsr113 l'ecuyer的组合lfsr(tausworth)随机数发生器。从 [4] [5]
lfsr88 l'ecuyer的组合lfsr(tausworth)随机数发生器。从 [6]

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Oracle将休眠为ISO 8601日期格式   当有线程时,swing计时器不会停止。睡在Java里面   如何使用swing在java中清空密码字段值(字符串)   如何在编辑文本字段上设置单词java(安卓)   单独类中的java OkHttp请求   java Tomcat配置文件/上下文xml似乎已经崩溃了。请确保它是可分析和有效的。有关详细信息,请参阅服务器日志   java在科尔多瓦的ActivityResult上传递   java如何在映射中保持插入顺序。工厂?   “DataOutputStream”和“ObjectOutputStream”之间的java差异   java从FTP文件列表中获取项目的时间戳   java如何在spring security中为每个人忽略一些资源/URL?   模板类嵌套时新的Java泛型类构造函数问题   java读取并查找文件大小为1GB的行   java如何使用字符串say“stop”停止整数格式的while循环   java是否可以在应用程序启动之间将JVM保留在内存中?   java Springboot出现“出现意外错误(类型=内部服务器错误,状态=500)”的问题