Python中random函數(shù)的用法整理大全
首先我們需要導(dǎo)入random模塊
1. random.random(): 返回隨機(jī)生成的一個(gè)浮點(diǎn)數(shù),范圍在[0,1)之間
import random print(random.random())
2. random.uniform(a, b): 返回隨機(jī)生成的一個(gè)浮點(diǎn)數(shù),范圍在[a, b)之間
import random print(random.uniform(1,5))
3. random.randint(a,b):生成指定范圍內(nèi)的整數(shù)
import random print(random.randint(1,10))
4. random.randrange([start],stop[,step]):用于從指定范圍內(nèi)按指定基數(shù)遞增的集合中獲取一個(gè)隨機(jī)數(shù)。
例如random.randrange(10,100,2),結(jié)果相當(dāng)于從 [10,12,14,16...96,98] 序列中獲取一個(gè)隨機(jī)數(shù)。random.randrange (10,100,2) 的結(jié)果上與 random.choice(range(10,100,2)) 等效。
import random print(random.randrange(10,22,3))
5. random.choice():從指定的序列中獲取一個(gè)隨機(jī)元素
random.choice()從序列中獲取一個(gè)隨機(jī)元素,其原型為random.choice(sequence),參數(shù)sequence表示一個(gè)有序類型。這里說明一下,sequence在Python中不是一種特定的類型,而是泛指序列數(shù)據(jù)結(jié)構(gòu)。列表,元組,字符串都屬于sequence。
import random print(random.choice('學(xué)習(xí)python')) # 從字符串中隨機(jī)取一個(gè)字符 print(random.choice(['good', 'hello', 'is', 'hi', 'boy'])) # 從list列表中隨機(jī)取 print(random.choice(('str', 'tuple', 'list'))) # 從tuple元組中隨機(jī)取
6. random.shuffle(x[,random]):用于將一個(gè)列表中的元素打亂,隨機(jī)排序
import random p=['hehe','xixi','heihei','haha','zhizhi','lala','momo..da'] random.shuffle(p) print(p) x = [1, 2, 3, 4, 5] random.shuffle(x) print(x)
7. random.sample(sequence,k):用于從指定序列中隨機(jī)獲取指定長(zhǎng)度的片段,sample()函數(shù)不會(huì)修改原有序列。
import random list1=[1,2,3,4,5,6,7,8,9,10] slice=random.sample(list1,5) print(slice) #[8, 3, 5, 9, 10] print(list1) #[1, 2, 3, 4, 5, 6, 7, 8, 9, 10] x = random.sample(range(0, 10), 5) print(x, type(x)) #[9, 2, 7, 8, 6] <class 'list'> Words = "AppleKMedoide" print(random.sample(Words, 3)) #['p', 'M', 'A'] print(random.sample(Words, 3)) #['d', 'i', 'l']
下面的函數(shù)需要調(diào)用numpy庫
8. np.random.rand(d0, d1, …, dn): 返回一個(gè)或一組浮點(diǎn)數(shù),范圍在[0, 1)之間
import random import numpy as np x = np.random.rand() y = np.random.rand(4) print(x,type(x)) #0.09842641570445387 <class 'float'> print(y,type(y)) #[0.27298291 0.12350038 0.63977128 0.90791234] <class 'numpy.ndarray'>
9. np.random.normal(loc=a, scale=b, size=()): 返回滿足條件為均值=a, 標(biāo)準(zhǔn)差=b的正態(tài)分布(高斯分布)的概率密度隨機(jī)數(shù)
np.random.normal(loc=a, scale=b, size=()) - 返回滿足條件為均值=a, 標(biāo)準(zhǔn)差=b的正態(tài)分布(高斯分布)的概率密度隨機(jī)數(shù),size默認(rèn)為None(返回1個(gè)隨機(jī)數(shù)),也可以為int或數(shù)組
import random import numpy as np x = np.random.normal(10,0.2,2) print(x,type(x)) #[9.78391585 9.83981096] <class 'numpy.ndarray'> y = np.random.normal(10,0.2) print(y,type(y)) #9.871187751372984 <class 'float'> z = np.random.normal(0,0.1,(2,3)) print(z,type(z)) #[[-0.07114831 -0.10258022 -0.12686863] # [-0.08988384 -0.00647591 0.06990716]] <class 'numpy.ndarray'> z = np.random.normal(0,0.1,[2,2]) print(z,type(z)) #[[ 0.07178268 -0.00226728] # [ 0.06585013 -0.04385656]] <class 'numpy.ndarray'>
10 np.random.randn(d0, d1, … dn): 返回標(biāo)準(zhǔn)正態(tài)分布(均值=0,標(biāo)準(zhǔn)差=1)的概率密度隨機(jī)數(shù)
np.random.randn(d0, d1, ... dn): 返回標(biāo)準(zhǔn)正態(tài)分布(均值=0,標(biāo)準(zhǔn)差=1)的概率密度隨機(jī)數(shù),
import random import numpy as np x = np.random.randn() y = np.random.randn(3) z = np.random.randn(3, 3) print(x, type(x)) print(y, type(y)) print(z, type(z))
11. np.random.standard_normal(size=()): 返回標(biāo)準(zhǔn)正態(tài)分布(均值=0,標(biāo)準(zhǔn)差=1)的概率密度隨機(jī)數(shù)
np.random.standard_normal(): 返回標(biāo)準(zhǔn)正態(tài)分布(均值=0,標(biāo)準(zhǔn)差=1)的概率密度隨機(jī)數(shù), size默認(rèn)為None(返回1個(gè)隨機(jī)數(shù)),也可以為int或數(shù)組
import random import numpy as np x = np.random.standard_normal() y = np.random.standard_normal(size=(3,3)) print(x, type(x)) print(y, type(y))
np.random.rand()與np.random.standard_normal()的方法結(jié)果相似,都是返回合符標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)浮點(diǎn)數(shù)或數(shù)組。
12. np.random.randint(a, b, size=(), dtype=int): 返回在范圍在[a, b)中的隨機(jī)整數(shù)(含有重復(fù)值)
np.random.randint(a, b, sizie=(), dytpe=int) - size默認(rèn)為None(返回1個(gè)隨機(jī)數(shù)),也可以為int或數(shù)組
import random import numpy as np # 從序列[0, 10)之間返回shape=(5,5)的10個(gè)隨機(jī)整數(shù)(包含重復(fù)值) x = np.random.randint(0, 10, size=(5, 5)) # 從序列[15, 20)之間返回1個(gè)隨機(jī)整數(shù)(size默認(rèn)為None, 則返回1個(gè)隨機(jī)整數(shù)) y = np.random.randint(15, 20) print(x, type(x)) print(y, type(y))
13. random.seed(): 設(shè)定隨機(jī)種子
在設(shè)定隨機(jī)種子為10之后,random.random()的隨機(jī)數(shù)將被直接設(shè)定為:0.5714025946899135
import random random.seed(10) x = random.random() print(x,type(x)) random.seed(10) y = random.random() print(y,type(y)) z = random.random() print(z,type(z))
random隨機(jī)數(shù)是這樣生成的:我們將這套復(fù)雜的算法(是叫隨機(jī)數(shù)生成器吧)看成一個(gè)黑盒,把我們準(zhǔn)備好的種子扔進(jìn)去,它會(huì)返給你兩個(gè)東西,一個(gè)是你想要的隨機(jī)數(shù),另一個(gè)是保證能生成下一個(gè)隨機(jī)數(shù)的新的種子,把新的種子放進(jìn)黑盒,又得到一個(gè)新的隨機(jī)數(shù)和一個(gè)新的種子,從此在生成隨機(jī)數(shù)的路上越走越遠(yuǎn)。
我們利用如下代碼進(jìn)行測(cè)試:
import numpy as np if __name__ == '__main__': i = 0 while i < 6: if i < 3: np.random.seed(0) print(np.random.randn(1, 5)) else: print(np.random.randn(1, 5)) i += 1 i = 0 while i < 2: print(np.random.randn(1, 5)) i += 1 print(np.random.randn(2, 5)) np.random.seed(0) print("###################################") i = 0 while i < 8: print(np.random.randn(1,5)) i += 1
通過該實(shí)驗(yàn)我們可以得到以下結(jié)論:
- 兩次利用隨機(jī)數(shù)種子后,即便是跳出循環(huán)后,生成隨機(jī)數(shù)的結(jié)果依然是相同的。第一次跳出while循環(huán)后,進(jìn)入第二個(gè)while循環(huán),得到的兩個(gè)隨機(jī)數(shù)組確實(shí)和加了隨機(jī)數(shù)種子不一樣。但是,后面的加了隨機(jī)數(shù)種子的,八次循環(huán)中的結(jié)果和前面的結(jié)果是一樣的。說明,隨機(jī)數(shù)種子對(duì)后面的結(jié)果一直有影響。同時(shí),加了隨機(jī)數(shù)種子以后,后面的隨機(jī)數(shù)組都是按一定的順序生成的。
- 在同樣的隨機(jī)種子后第六次的隨機(jī)數(shù)生成結(jié)果,兩行五列的數(shù)組和兩個(gè)一行五列的數(shù)組結(jié)果相同。說明,在生成多行隨機(jī)數(shù)組時(shí),是由單行隨機(jī)數(shù)組組合而成的。
- 利用隨機(jī)數(shù)種子,每次生成的隨機(jī)數(shù)相同,就是使后面的隨機(jī)數(shù)按一定的順序生成。當(dāng)隨機(jī)數(shù)種子參數(shù)為0和1時(shí),生成的隨機(jī)數(shù)和我上面高亮的結(jié)果相同。說明該參數(shù)指定了一個(gè)隨機(jī)數(shù)生成的起始位置。每個(gè)參數(shù)對(duì)應(yīng)一個(gè)位置。并且在該參數(shù)確定后,其后面的隨機(jī)數(shù)的生成順序也就確定了。
- 隨機(jī)數(shù)種子的參數(shù)怎么選擇?我認(rèn)為隨意,這個(gè)參數(shù)只是確定一下隨機(jī)數(shù)的起始位置。
本文綜合參考了如下文章整理:
總結(jié)
到此這篇關(guān)于Python中random函數(shù)用法的文章就介紹到這了,更多相關(guān)Python random函數(shù)用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Sklearn多種算法實(shí)現(xiàn)人臉補(bǔ)全的項(xiàng)目實(shí)踐
本文主要介紹了Sklearn多種算法實(shí)現(xiàn)人臉補(bǔ)全的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03tensorflow 輸出權(quán)重到csv或txt的實(shí)例
今天小編就為大家分享一篇tensorflow 輸出權(quán)重到csv或txt的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-06-06Python常見數(shù)據(jù)類型轉(zhuǎn)換操作示例
這篇文章主要介紹了Python常見數(shù)據(jù)類型轉(zhuǎn)換操作,結(jié)合實(shí)例形式分析了Python針對(duì)列表、集合、元組、字典等數(shù)據(jù)類型轉(zhuǎn)換的相關(guān)操作技巧,需要的朋友可以參考下2019-05-05Python Flask請(qǐng)求擴(kuò)展與中間件相關(guān)知識(shí)總結(jié)
今天帶大家學(xué)習(xí)的是關(guān)于Python Flask的相關(guān)知識(shí),文章圍繞著Flask請(qǐng)求擴(kuò)展與中間件的知識(shí)展開,文中有非常詳細(xì)的介紹,需要的朋友可以參考下2021-06-06python中使用pymssql庫操作MSSQL數(shù)據(jù)庫
這篇文章主要給大家介紹了關(guān)于python中使用pymssql庫操作MSSQL數(shù)據(jù)庫的相關(guān)資料,最近在學(xué)習(xí)python,發(fā)現(xiàn)好像沒有對(duì)pymssql的詳細(xì)說明,于是乎把官方文檔學(xué)習(xí)一遍,重要部分做個(gè)歸檔,方便以后查閱,需要的朋友可以參考下2023-08-08Python selenium使用autoIT上傳附件過程詳解
這篇文章主要介紹了Python selenium使用autoIT上傳附件過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-05-05詳解Python中的編碼問題(encoding與decode、str與bytes)
這篇文章主要介紹了Python中的編碼問題(encoding與decode、str與bytes),幫助大家更好的理解和使用python進(jìn)行開發(fā),感興趣的朋友可以了解下2020-09-09