Python的random
生活随笔
收集整理的這篇文章主要介紹了
Python的random
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
隨機數生成是日常工作中經常使用的功能。下面簡要介紹下Python的隨機數生成標準庫random。
一、常用函數
(1)生成0和1之間的浮點數,random()
生成區間為[0,1)
import?random
print(random.random())
輸出結果:0.8092116913076974
(2)生成a和b之間的整數,randint(a,b)
生成區間為[a,b]
print(random.randint(-10,10))
輸出結果:9
a必須小于等于b,如果a==b,則輸出a。
print(random.randint(10,10))
輸出結果:10
(3)生成a和b之間的浮點數,unifrom(a,b),也是均勻分布,因為非常常用放在這里。
生成區間為[a,b]
print(random.uniform(-10,10))
輸出結果:-4.109021075631352
這個函數中,a可以大于b,生成的是min(a,b)和max(a,b)之間的浮點數。
(4)生成a和b之間某個范圍的整數,randrange(a,b,step)
生成區間為:在[a,b]范圍內,從a開始(包含a),每隔step的數形成的集合。
print(random.randrange(0,10,2))
輸出結果:生成[0,10]之前的偶數
print(random.randrange(1,10,2))
輸出結果:生成[0,10]之前的奇數
二、操作序列的函數
(1)從一個序列seq中隨機選取一個元素,choice(seq)
seq1 = [1,2,3,4,5]
seq2 = ((1,2),(3,4),(5,6))
seq3 ="abcdef"
print(random.choice(seq1))
print(random.choice(seq2))
print(random.choice(seq3))
輸出結果:
5
(3, 4)
a
(2)將一個列表list中的元素隨機打亂,shuffle(list)
注意,shuffle函數需要修改原序列,因此輸入的序列seq必須是可更改的,所以只支持list類型。shuffle有個很傳神的名字:洗牌。
seq = [1,2,3,4,5]
print(random.shuffle(seq),seq,sep='\n')
輸出結果:
None
[2, 5, 1, 4, 3]
(3)從一個序列中隨機取出k個元素,sample(seq,k)
seq = [1,2,3,4,5]
print(random.sample(seq,3),seq,sep='\n')
輸出結果:
[4, 5, 2]
[1, 2, 3, 4, 5]
注意幾個方面:一是sample并不改變原序列,因此輸入序列seq可以是元組、字符串、set等數據類型。二是取出k個元素是從不同位置取值的,因此如果原序列無重復元素,形成的新序列也不會存在重復元素。三是不管輸入序列seq是什么類型,sample返回的是list類型,看下例。
seq = "abcdef"
print(random.sample(seq,3),seq,sep='\n')
輸出結果:
['c', 'a', 'd']
abcdef
三、隨機生成符合某種分布的數據
(1)均勻分布,uniform(a,b)
見第一節描述。非常常用。
(2)正態分布,normalvariate(mu,sigma)
mu:均值
sigma:標準差
mu=0,sigma=1為標準正態分布。
除了均勻分布,正態分布用的是最多的。
import?random
import?numpy?as?np
import?time
st = time.clock()
N =1000000
n = []
for?i?in?range(N):
? ? n.append(random.normalvariate(0,1))
print("均值=",np.mean(n))
print("標準差=",np.std(n))
print("耗時=",time.clock() - st)
輸出結果:
均值= -7.42643413388e-05
標準差= 1.00049689373
耗時= 5.702438655147374
可以看出,隨機生成1000000個數,這些數符合正態分布。
(3)高斯分布,gauss(mu,sigma)
就是正態分布,采用了不同的實現方式,據說運行速度更快。
import random
import numpy as np
import?time
st = time.clock()
N =1000000
n = []
for?i?in?range(N):
? ? n.append(random.gauss(0,1))
print("均值=",np.mean(n))
print("標準差=",np.std(n))
print("耗時=",time.clock() - st)
輸出結果
均值= 0.000604319020838
標準差= 0.999634159673
耗時= 4.827287158657131
1000000個數快了不到1秒,也沒快太多。
(4)還有生成三角形分布、對數分布、指數分布、β分布、伽馬分布等的函數
triangular(low, high, mode)三角形分布
lognormvariate(mu, sigma)對數分布
expovariate(lambd)指數分布
gammavariate(alpha, beta)伽馬分布
等等。實際工作中,這些分布比均勻分布和正態分布用的都少的多。
總結
以上是生活随笔為你收集整理的Python的random的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python的集合set
- 下一篇: numpy的random