詳解隨機(jī)數(shù)的生成

隨機(jī)數(shù)參與的應(yīng)用場(chǎng)景大家一定不會(huì)陌生抱究,比如密碼加鹽時(shí)會(huì)在原密碼上關(guān)聯(lián)一串隨機(jī)數(shù)战转,蒙特卡洛算法會(huì)通過隨機(jī)數(shù)采樣等等娃承。Python內(nèi)置的random模塊提供了生成隨機(jī)數(shù)的方法,使用這些方法時(shí)需要導(dǎo)入random模塊薛匪。

import random

下面介紹下Python內(nèi)置的random模塊的幾種生成隨機(jī)數(shù)的方法。

1脓鹃、random.random()隨機(jī)生成 0 到 1 之間的浮點(diǎn)數(shù)[0.0, 1.0)逸尖。注意的是返回的隨機(jī)數(shù)可能會(huì)是 0 但不可能為 1,即左閉右開的區(qū)間。

print("random: ", random.random())
#random:  0.5714025946899135

2冷溶、random.randint(a , b)隨機(jī)生成 a 與 b 之間的整數(shù)[a, b]渐白,a<=n<=b,隨機(jī)整數(shù)不包含 b 時(shí)[a, b)可以使用 random.randrange() 方法逞频。

print("randint: ", random.randint(6,8))
#randint:  8

3纯衍、random.randrange(start,stop,step)按步長(zhǎng)step隨機(jī)在上下限范圍內(nèi)取一個(gè)隨機(jī)數(shù),start<=n<stop苗胀。

print("randrange: ",random.randrange(20,100,5))
#randrange:  85

4襟诸、random.uniform(a, b)隨機(jī)生成 a 與 b 之間的浮點(diǎn)數(shù)[a, b],a<=n<=b基协。

print("uniform: ",random.uniform(5,10))
#uniform:  5.119790163375776

5歌亲、random.choice()從列表中隨機(jī)取出一個(gè)元素,比如列表澜驮、元祖陷揪、字符串等。注意的是杂穷,該方法需要參數(shù)非空悍缠,否則會(huì)拋出 IndexError 的錯(cuò)誤。

print("choice: ",random.choice("www.yuanxiao.net"))
#choice:  y

6耐量、random.shuffle(items) 把列表 items 中的元素隨機(jī)打亂飞蚓。注意的是,如果不想修改原來的列表廊蜒,可以使用 copy 模塊先拷貝一份原來的列表趴拧。

num = [1, 2, 3, 4, 5]
random.shuffle(num)
print("shuffle: ",num)
#shuffle:  [1, 3, 5, 4, 2]

7、random.sample(items, n)從列表 items 中隨機(jī)取出 n 個(gè)元素山叮。

num = [1, 2, 3, 4, 5]
print("sample: ",random.sample(num, 3))
#sample:  [4, 1, 5]

Python 的random模塊產(chǎn)生的隨機(jī)數(shù)其實(shí)是偽隨機(jī)數(shù)著榴,依賴于特殊算法和指定不確定因素(種子seed)來實(shí)現(xiàn)。如randint方法生成一定范圍內(nèi)的隨機(jī)數(shù)屁倔,會(huì)先指定一個(gè)特定的seed兄渺,將seed通過特定的隨機(jī)數(shù)產(chǎn)生算法,得到一定范圍內(nèi)隨機(jī)分布的隨機(jī)數(shù)汰现。因此對(duì)于同一個(gè)seed值的輸入產(chǎn)生的隨機(jī)數(shù)會(huì)相同挂谍,省略參數(shù)則意味著使用當(dāng)前系統(tǒng)時(shí)間秒數(shù)作為種子值,達(dá)到每次運(yùn)行產(chǎn)生的隨機(jī)數(shù)都不一樣瞎饲。

random.seed(2)
print("random: ", random.random())
#random:  0.9560342718892494

random.seed(3)
print("random: ", random.random())
#random:  0.23796462709189137

random.seed(3)#同一個(gè)種子值口叙,產(chǎn)生的隨機(jī)數(shù)相同
print("random: ", random.random())
#random:  0.23796462709189137

numpy庫(kù)也提供了random模塊,用于生成多維度數(shù)組形式的隨機(jī)數(shù)嗅战。使用時(shí)需要導(dǎo)入numpy庫(kù)妄田。

import numpy as np

下面介紹下numpy庫(kù)的random模塊的幾種生成隨機(jī)數(shù)的方法俺亮。

1、numpy.random.rand(d0,d1,…,dn)

  • rand函數(shù)根據(jù)給定維度生成[0,1]之間的數(shù)據(jù)疟呐,包含0脚曾,不包含1
  • dn表格每個(gè)維度
  • 返回值為指定維度的array
print("np.random.rand:\n {}".format(np.random.rand(4,2))) 
# shape: 4*3
"""
np.random.rand:
 [[0.5488135  0.71518937]
 [0.60276338 0.54488318]
 [0.4236548  0.64589411]
 [0.43758721 0.891773  ]]
"""
print("np.random.rand:\n {}".format(np.random.rand(4,3,2))) 
# shape: 4*3*2
"""
np.random.rand:
 [[[0.96366276 0.38344152]
  [0.79172504 0.52889492]
  [0.56804456 0.92559664]]

 [[0.07103606 0.0871293 ]
  [0.0202184  0.83261985]
  [0.77815675 0.87001215]]

 [[0.97861834 0.79915856]
  [0.46147936 0.78052918]
  [0.11827443 0.63992102]]

 [[0.14335329 0.94466892]
  [0.52184832 0.41466194]
  [0.26455561 0.77423369]]]
"""

2、numpy.random.randn(d0,d1,…,dn)

  • randn函數(shù)返回一個(gè)或一組樣本启具,具有標(biāo)準(zhǔn)正態(tài)分布本讥。
  • dn表格每個(gè)維度
  • 返回值為指定維度的array
  • 標(biāo)準(zhǔn)正態(tài)分布—-standard normal distribution
  • 標(biāo)準(zhǔn)正態(tài)分布又稱為u分布,是以0為均值鲁冯、以1為標(biāo)準(zhǔn)差的正態(tài)分布拷沸,記為N(0,1)薯演。
print("np.random.randn:\n {}".format(np.random.randn())) 
# 當(dāng)沒有參數(shù)時(shí)撞芍,返回單個(gè)數(shù)據(jù)
"""
np.random.randn:
 2.2697546239876076
"""
print("np.random.randn:\n {}".format(np.random.randn(2,4)))
"""
np.random.randn:
 [[-1.45436567  0.04575852 -0.18718385  1.53277921]
 [ 1.46935877  0.15494743  0.37816252 -0.88778575]]
"""
print("np.random.randn:\n {}".format(np.random.randn(4,3,2)))
"""
np.random.randn:
 [[[-1.98079647 -0.34791215]
  [ 0.15634897  1.23029068]
  [ 1.20237985 -0.38732682]]

 [[-0.30230275 -1.04855297]
  [-1.42001794 -1.70627019]
  [ 1.9507754  -0.50965218]]

 [[-0.4380743  -1.25279536]
  [ 0.77749036 -1.61389785]
  [-0.21274028 -0.89546656]]

 [[ 0.3869025  -0.51080514]
  [-1.18063218 -0.02818223]
  [ 0.42833187  0.06651722]]]
"""

3、numpy.random.randint(low, high=None, size=None, dtype=’l’)

  • 返回隨機(jī)整數(shù)跨扮,范圍區(qū)間為[low,high)序无,包含low,不包含high
  • 參數(shù):low為最小值衡创,high為最大值帝嗡,size為數(shù)組維度大小,dtype為數(shù)據(jù)類型钧汹,默認(rèn)的數(shù)據(jù)類型是np.int
  • high沒有填寫時(shí)丈探,默認(rèn)生成隨機(jī)數(shù)的范圍是[0录择,low]
print("np.random.randint:\n {}".format(np.random.randint(1,size=5)))
# 返回[0,1)之間的整數(shù)拔莱,所以只有0
"""
np.random.randint:
 [0 0 0 0 0]
"""
print("np.random.randint:\n {}".format(np.random.randint(1,5)))# 返回1個(gè)[1,5)時(shí)間的隨機(jī)整數(shù)
"""
np.random.randint:
 2
"""
print("np.random.randint:\n {}".format(np.random.randint(-5,5,size=(2,2))))
"""
np.random.randint:
 [[-5 -3]
 [ 2 -3]]
"""

4、numpy.random.seed()

  • np.random.seed()的作用:使得隨機(jī)數(shù)據(jù)可預(yù)測(cè)隘竭。
  • 當(dāng)我們?cè)O(shè)置相同的seed塘秦,每次生成的隨機(jī)數(shù)相同。如果不設(shè)置seed动看,則每次會(huì)生成不同的隨機(jī)數(shù)

轉(zhuǎn)自:https://juejin.im/post/5cefccb0e51d455d850d3a85

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末尊剔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子菱皆,更是在濱河造成了極大的恐慌须误,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仇轻,死亡現(xiàn)場(chǎng)離奇詭異京痢,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)篷店,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門祭椰,熙熙樓的掌柜王于貴愁眉苦臉地迎上來臭家,“玉大人,你說我怎么就攤上這事方淤《ち蓿” “怎么了?”我有些...
    開封第一講書人閱讀 158,207評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵携茂,是天一觀的道長(zhǎng)你踩。 經(jīng)常有香客問我,道長(zhǎng)邑蒋,這世上最難降的妖魔是什么姓蜂? 我笑而不...
    開封第一講書人閱讀 56,755評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮医吊,結(jié)果婚禮上钱慢,老公的妹妹穿的比我還像新娘。我一直安慰自己卿堂,他們只是感情好束莫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著草描,像睡著了一般览绿。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上穗慕,一...
    開封第一講書人閱讀 50,050評(píng)論 1 291
  • 那天饿敲,我揣著相機(jī)與錄音,去河邊找鬼逛绵。 笑死怀各,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的术浪。 我是一名探鬼主播瓢对,決...
    沈念sama閱讀 39,136評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼胰苏!你這毒婦竟也來了硕蛹?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤硕并,失蹤者是張志新(化名)和其女友劉穎法焰,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倔毙,經(jīng)...
    沈念sama閱讀 44,330評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡埃仪,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了普监。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贵试。...
    茶點(diǎn)故事閱讀 38,789評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡琉兜,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毙玻,到底是詐尸還是另有隱情豌蟋,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評(píng)論 4 333
  • 正文 年R本政府宣布桑滩,位于F島的核電站梧疲,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏运准。R本人自食惡果不足惜幌氮,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評(píng)論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胁澳。 院中可真熱鬧该互,春花似錦、人聲如沸韭畸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽胰丁。三九已至随橘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锦庸,已是汗流浹背机蔗。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留甘萧,地道東北人萝嘁。 一個(gè)月前我還...
    沈念sama閱讀 46,598評(píng)論 2 362
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像幔嗦,于是被迫代替她去往敵國(guó)和親酿愧。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沥潭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容