在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了。
首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等。产生这些随机数的方法有很多种,而这些产生随机数的方法就称为随机数生成器。像前面说的由物理现象所产生的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。
但是在我们的实际生活中广泛应用的是伪随机数生成器,所谓的“伪”就是假的的意思,也就是说并不是真正的随机数。那么这些随机数是怎么实现的呢?这些数字是由固定的算法实现的,是有规律可循的,并不能实现真正的“随机”,但是它们具有类似于随机数的统计特征。这样的发生器叫做伪随机数发生器。
实现伪随机数的方法有很多种,如:平方取中法,线性同余法等方法。
下面主要介绍的是线性同余法,如C的rand函数和JAVA的java.util.Random类就是使用该方法实现的,其公式为:
<

rNew = (a*rOld + b) % (end-start)
其中, a称为乘数,b称为增量,(end-start)称为模数,它们均为常数。
然后设置rOld = rNew,一般要求用户指定种子数rOld(也称为seed),当然也可以自由选择a和b,但是两个数如果选择不好,可能会影响数字的随机性 ,所以一般令:
a=32310901
b=1729
这样使得生成的随机数最均匀。下面我是用的将种子自定义设为999999999。代码如下:

def myrandint(  start,end,seed=999999999   ):a=32310901     #产生出的随机数最均匀b=1729rOld=seedm=end-startwhile True:      #每调用一次这个myrandint函数,才生成一次随机数  所以要惰性求值rNew = (a*rOld+b)%myield rNewrOld=rNew#模拟使用20个不同的种子来生成随机数
for i in range(20):r = myrandint(1,10000,  i)#每个种子生成10个随机数print('种子',i,'生成随机数')for j in range(10):print( next(r),end=',' )print(      )

运行结果是使用20个不同的种子生成的随机数。
但是,这样将种子设为固定值是不合理的。

r = myrandint(1,10000,2)
print(r.__next__())
print(r.__next__())

运行结果为:
9993
6934
当再次运行代码:

r = myrandint(1,10000,2)
print(r.__next__())

运行结果仍然是:9993
这便不能体现随机,因此常采用系统时间作为种子来实现该算法。以上代码只需将seed设为系统时间便可以实现。

使用python实现伪随机数生成器相关推荐

  1. [Python标准库]random——伪随机数生成器

    Python 版本:1.4 及以后版本         random 模块基于 Mersenne Twister 算法提供了一个快速伪随机数生成器.原先开发这个生成器是为了向蒙特卡洛模拟生成输入,Me ...

  2. python标准库生成随机数_Python3标准库:random伪随机数生成器

    1. random伪随机数生成器 random模块基于Mersenne Twister算法提供了一个快速伪随机数生成器.原来开发这个生成器是为了向蒙特卡洛模拟生成输入,Mersenne Twister ...

  3. python生成伪随机数的扩展库_python模块介绍-random:生成伪随机数

    概述 这个模块实现的伪随机数生成器. 对于整数,从区间选取.对于序列,随机元素. 在实线的,有功能来计算均匀分布,正态分布(高斯) ,对数正态分布,负指数,γ和β分布.对于生成的角度分布,冯·米塞斯的 ...

  4. python基础(迭代器,生成器,装饰器)

    python: 生成器: 因为当列表元素达到一定上限,列表会占很大内存空间来存储,所以列表是受到内存限制的来适当使用. 生成器可以按照一个算法,循环推导出元素,就不用一次生成整个列表,而通过生成器(g ...

  5. 简单介绍python迭代器和生成器

    这篇文章主要介绍了Python中的迭代器和生成器,涉及到Python中很多重要的特性,需要的朋友可以参考下,希望能够给你带来帮助 python迭代器和生成器 1.迭代器 这里用字典示例 while T ...

  6. python编程有什么用处-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  7. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  8. python的 是什么-python中的生成器是什么?生成器有什么用处?

    在以下的文章之中我们来了解一下什么是python中生成器.了解一下python生成器是什么,以及生成器在python编程之中能起到什么样的作用. python生成器是什么? 通过列表生成式,我们可以直 ...

  9. Python学习day12(生成器,列表/生成器推导式)

    Python学习day12(生成器,列表/生成器推导式) 生成器 初始生成器 我们知道的迭代器有两种:一种是调用方法直接返回的,一种是可迭代对象通过执行iter方法得到的,迭代器有的好处是可以节省内存 ...

最新文章

  1. tensorflow和keras的版本问题
  2. Java的未来:百家争鸣的JVM
  3. Spring Boot中验证码实现kaptcha
  4. 光伏电池组 局部阴影时输出模型 P-U曲线 I-U曲线 simulink实现 MPPT-Model
  5. 多对多的属性对应表如何做按照类别的多属性匹配搜索
  6. boost::merge相关的测试程序
  7. python输入多组测试数据_python ddt数据驱动实例代码分享
  8. vi and vim 用法
  9. c++ 圆上任意点坐标计算_线性代数总结 第三章 向量代数与几何计算(空间平面和直线)...
  10. 稳定的存储环境决定业务正常运作
  11. JAVA并发包内容_java并发包
  12. iOS定位服务CoreLocation
  13. 谈谈基于SQL Server 的Exception Handling[中篇]
  14. QQ登陆界面Resource Hacker制作
  15. 在Status状态栏中的出现Out of date shapes问题解决方式
  16. java中封装类Feild和使用setter和getter方法访问封装的类Feild
  17. 高中辍学,三年间做遍各种零工,转行程序员改变人生
  18. 卡特加特数字家庭又爆重磅合作!厦门火炬创投莅临卡特加特考察
  19. ACM--South Pacific 2012
  20. 兼阅万分享:网络赚钱的几个干货思维

热门文章

  1. 绝对定位和相对定位的区别
  2. vim 常用 NERDTree 快捷键
  3. 手机+笔记本无线上网
  4. Tornado html生成动态pdf
  5. 如何实现微信公众号本地调试
  6. 人民币大小写转换(阿拉伯数字和汉字转换)
  7. 用C#读取XML指定节点下的值
  8. js - 点击按钮关闭当前网页探究
  9. powerpc linux交叉编译器,PowerPC交叉编译环境(powerpc-linux-gcc)设置
  10. vue methods async await 异步函数