random---伪随机数⽣成器
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()利⽤这些数据重新初始化伪随机数⽣成器。
gerstate()返回的数据是⼀个实现细节,所以这个例⼦⽤pickle将数据保存到⼀个⽂件,不过可以把它当作⼀个⿊盒。如果程序开始是这个⽂件存在,则加载原来的状态并继续。每次运⾏时都会在保存之前及之后⽣成⼀些书,以展⽰恢复状态会导致⽣成器在次⽣成同样的值
python生成1到100之间随机数【相当于电影重放⼀样,设置⼀个节点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 plain copy to clipboard print
1. import random
2.
3. out={'heads':0,'tail':0}
4.
5. sides=['heads','tail']
6.
7. for i in range(100000):
8.    out[random.choice(sides)]+=1
9.
10. print('head:',out['heads'])
11. print('tail:',out['tail'])
这样不必再使⽤数字进⾏转换
。。,排列,采样,多个并发⽣成器,SystemRandom,⾮均匀分布,⾓分布,⼤⼩分布

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。