python3.5

作用:实现了多种类型的伪随机数生成器

random模块基于Mersenne Twister 算法提供了一个快速伪随机数生成器。原先开发这个生成器是为了向蒙特卡洛模拟生成输入,Mersenne Twister算法会生成有一个大周期的近均匀分布的数,以适用于各种类型的应用。

1.生成随机数

random()函数从所生成的序列返回下一个随机的浮点数值。返回的所有值都在0-n之间。

import random

for i in range(5):
    print("%04.3f" % random.random())
0.166
0.201
0.282
0.920
0.429

要生成一个指定数值区间内的数,则要使用uniform().

import random

for i in range(3):
    print("%.3f" % random.uniform(1,100))
3.520
79.323
15.854

传入最大值和最小值,uniform()会使用公式min+(max-min)*random()来调整random()的返回值

2.指定种子

每次调用random()会生成不同的值,在一个非常的的周期之后数字才会重复。这对于生成唯一值或变化的值很有用,不过有些情况下可能需要提供相同的数据集,从而以不同的方式处理。对此,一种方法是使用一个程序来生成随机数,并保存这些随机数,以便通过一个单独的方式另行处理。不过对于量很大的数据来说可能并不实用,所以random包含了一个seed()函数,用来初始化伪随机数生成器,使它能生成一个期望的值集。

种子(seed)值会控制生成伪随机数所用公式产生的第一个值,由于公式是确定的,改变种子也就设置了整个要生成的序列。seed()的参数可以是任意可散列对象。默认会使用平台特定的随机源(如果有的话)。否则,会使用当前时间。

【伪随机数之所以是伪,应该就是这个原因了吧,种子定了,整个序列就定了,通过不短变换种子值得到随机数】

3.保存状态

random()使用的伪随机算法的内部状态可以保存,并用于控制后续各轮生成的随机数。继续生成随机数之前恢复前一个状态,这会减少有之前输入得到重复的值或值序列的可能性。getstate()函数会返回一些数据,以后可以用setstate()利用这些数据重新初始化伪随机数生成器。

import random
import os
import pickle

if os.path.exists('state.dat'):
    print("Found state.dat, initializing random module")
    with open('state.dat','rb') as fp:
        state=pickle.load(fp)
    random.setstate(state)
else:
    print("No state.dat, seeding")
    random.seed(1)

for i in range(3):
    print("%.3f" % random.random())
print()

with open('state.dat','wb') as fp:
    pickle.dump(random.getstate(),fp)

print("\nAfter saving state")
for i in range(3):
    print("%.3f" % random.random())
print()

gerstate()返回的数据是一个实现细节,所以这个例子用pickle将数据保存到一个文件,不过可以把它当作一个黑盒。如果程序开始是这个文件存在,则加载原来的状态并继续。每次运行时都会在保存之前及之后生成一些书,以展示恢复状态会导致生成器在次生成同样的值

【相当于电影重放一样,设置一个节点getstate()[记录播放到的时间],用setstate()回到上次节点的时间,再次播放一遍】

4.随机整数

random()将生成浮点数。可以吧结果转换为整数,不过直接使用randint()生成整数会更方便。

import random

print("[1,100]")
for i in range(5):
    print(random.randint(1,100),end=' ')
print()

print("[-10,5]")
for i in range(5):
    print(random.randint(-10,5),end=' ')

randint()的参数的值是闭区间的两端。这些数可以是正数或负数,不过第一个值要小于第二个值。

randrange()是从区间选择值的一种更一般的形式。除了开始值(start)和结束值(stop),randrange()还支持步长(step)参数,所以它完全等价于从range(start,stop,step)选择一个随机值。不过randrange更高效,因为它并没有真正构造区间。

5.选择随机元素 choice()

在一个序列中随机选择。

模拟抛硬币:

view plaincopy to clipboardprint
  1. import random
  2. out={'heads':0,'tail':0}
  3. sides=['heads','tail']
  4. for i in range(100000):
  5. out[random.choice(sides)]+=1
  6. print('head:',out['heads'])
  7. print('tail:',out['tail'])
 

这样不必再使用数字进行转换

。。。,排列,采样,多个并发生成器,SystemRandom,非均匀分布,角分布,大小分布

转载于:https://www.cnblogs.com/DreamZero/p/5071558.html

random---伪随机数生成器相关推荐

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

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

  2. 第五章:数学运算-random:伪随机数生成器-生成随机数

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

  3. random — 伪随机数生成器(史上总结最全)

    目的:实现几种类型的伪随机数生成器. random 模块基于 Mersenne Twister 算法提供了一个快速的伪随机数生成器.Mersenne Twister 最初开发用于为蒙特卡洛模拟器生成输 ...

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

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

  5. java伪随机数生成器

    关于随机数的基本概念 1.对随机数性质分类: 随机性:符合该性质的叫弱伪随机数.这种随机数仅可以用于一般应用,无法用在密码学,例如java中的java.util.Random类 不可预测性:符合该性质 ...

  6. 【数字IC手撕代码】Verilog伪随机数生成器|线性反馈移位寄存器|题目|原理|设计|仿真

    芯片设计验证社区·芯片爱好者聚集地·硬件相关讨论社区·数字verifier星球 四社区联合力荐!近500篇数字IC精品文章收录! [数字IC精品文章收录]学习路线·基础知识·总线·脚本语言·芯片求职· ...

  7. 使用python实现伪随机数生成器

    在前两天学习了使用python实现伪随机数的方法,今天是时候来做一个总结了. 首先要说明的是什么是随机数,真正的随机数是使用物理现象产生的:比如掷钱币.骰子.转轮.使用电子元件的噪音.核裂变等等.产生 ...

  8. 计算机仿真随机数生成,伪随机数生成器研究

    摘要: 本文主要考虑了基于计算复杂性定义的伪随机数生成器.介绍了单向函数与伪随机数生成器之间的关系以及几种常见的基于离散对数问题,DDH问题的伪随机数生成器.在分析了它们的安全性和效率的同时也提出了改 ...

  9. gjrand 4.0 发布,C语言的伪随机数生成器

    gjrand 4.0 使用新的底层生成器,生成随机数结果更加无误. gjrand 是一个C语言的伪随机数生成器.伪随机数的意思是在这个随机数并不保证是真正的随机,只适合一些对随机要求不是很高的场合,例 ...

  10. Java7 的Random伪随机数和线程安全的ThreadLocalRandom

    一.Random伪随机数: Random 类专门用于生成一个伪随机数,它有两个构造器: 一个构造器使用默认的种子(以当前时间作为种子) ,另 个构造器需要程序员显式传入一个 long 整数的种子. 当 ...

最新文章

  1. c++ string替换指定字符串内的所有字段
  2. Vmare 15 安装 macOS 15.5 的关键步骤
  3. MA5680T OLT管理软件,全智能判断板卡,无人值守策略,根据光猫类型自动扫描添加光猫...
  4. 更新整理本人所有博文中提供的代码与工具(C++,2013.11)
  5. 650c公路车推荐_2020最具性价比的中高端公路整车盘点
  6. HDFS读写数据的原理
  7. Swin Transformer V2!MSRA原班人马提出了30亿参数版本的Swin Transformer!
  8. android前端开发 布局学习
  9. 使用JdbcTemplate报 Incorrect column count: expected 1, actual 5错误解决
  10. 2017.4找工作面试记录-第三周(2)--金蝶
  11. java类型转换的要求_java数据类型04_基本数据类型转换
  12. 三菱gx works2安装教程(详细超安装方法步骤)
  13. Django中ForeignKey和ManyToMany使用探究:
  14. 分布式任务ijobhandle
  15. eviews如何处理缺失数据填补_缺失值的处理
  16. 项目经理与技术经理的区别
  17. IC Compiler 实验三
  18. 新代系统反向间隙参数_如何调试新代系统SYNTEC参数
  19. 随笔之javamail邮件发送(阿里云企业邮箱)
  20. 大数据运营之财务数据模型设计

热门文章

  1. 在Hadoop集群上,搭建HBase集群
  2. 神马是代码简单的cmd模式,这就是!
  3. dialog像父activity传递参数
  4. 01 Python变量和数据类型
  5. openresty 日志输出的处理
  6. javascript消除字符串两边空格的两种方式,面向对象和函数式编程。python oop在调用时候的优点...
  7. Android数据适配-ExpandableListView
  8. crontab里shell脚本将top信息写入文件
  9. Petapoco使用SQLite的异常问题
  10. eclipse编译hadoop插件