Python3.3中如何产生伪随机数

python3.3的random模块实现各种分布下的伪随机数生成。

对整数而言,可以在一个范围内按均匀分布来随机选择。对序列来说,同样可以按照均匀分布来选择一个元素,可以对数组产生随机排列,也可以进行随机的不重复采样。

对随机实数而言,提供均匀,正态(高斯),对数正态,负指数,γ和β等多种分布。甚至角分布和冯·米塞斯分布(循环正态分布),简要示例如下:

 1 # coding=utf-8
 2 __author__ = 'hillfree'
 3 
 4 import random
 5 
 6 
 7 def testRand():
 8 
 9     # 在[a, b]之间产生随机整数 random.randint(a, b)
10     for i in range(5):
11         ret = random.randint(100, 999)
12         print("random.randint(100, 999) = {0}".format(ret,))
13 
14     # 在[a, b]之间产生随机浮点数 random.uniform(a, b)
15     for i in range(5):
16         ret = random.uniform(1.0, 100.0)
17         print("random.uniform(1.0, 100.0) = {0}".format(ret,))
18 
19     # 在[0.0, 1.0)之间产生随机浮点数 random.random()
20     for i in range(5):
21         ret = random.random()
22         print("random.random() = {0}".format(ret,))
23 
24     # 在样本population中随机选择k个 random.sample(population, k)
25     population = {"Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun" }
26     for i in range(5):
27         ret = random.sample(population, 3)
28         print("random.sample(population, 3) = {0}".format(ret,))
29 
30     # 在序列seq中随机选择1个 random.choice(seq)
31     seq = ("to", "be", "or", "not", 'tobe', 'is', 'a', 'question')
32     for i in range(5):
33         ret = random.choice(seq)
34         print("random.choice(seq) = {0}".format(ret,))
35 
36     # 从序列中随机获取指定长度的片断。不修改原有序列。
37     # random.sample(sequence, k)
38     sentence = "to be or not to be is a question"
39     for i in range(5):
40         ret = random.sample(sentence, 5)
41         print("random.sample(sentence, 5) = {0}".format(ret,))
42 
43     # 三角分布的随机数 random.triangular(low, high, mode)
44     for i in range(5):
45         ret = random.triangular(0, 100, 10)
46         print(" random.triangular(0, 100, 10) = {0}".format(ret,))
47 
48     # 高斯分布的随机数(稍快) random.gauss(mu, sigma)
49     for i in range(5):
50         ret = random.gauss(0, 1)
51         print(" random.gauss(0, 1) = {0}".format(ret,))
52 
53     # beta β分布的随机数 random.betavariate(alpha, beta)
54 
55     # 指数分布的随机数 random.expovariate(lambd)
56 
57     # 伽马分布的随机数 random.gammavariate(alpha, beta)
58 
59     # 对数正态分布的随机数 random.lognormvariate(mu, sigma)
60 
61     # 正态分布的随机数 random.normalvariate(mu, sigma)
62 
63     # 冯米塞斯分布的随机数 random.vonmisesvariate(mu, kappa)
64 
65     # 帕累托分布的随机数 random.paretovariate(alpha)
66 
67     # 韦伯分布的随机数 random.weibullvariate(alpha, beta)
68 
69 
70 if __name__ == "__main__" :
71     testRand()

 

posted @ 2013-03-18 23:57  hgdfr  阅读(4259)  评论(0编辑  收藏  举报