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