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()