Python?NumPy隨機(jī)抽模塊介紹及方法
1. 隨機(jī)數(shù)
np.random.random()
是最常用的隨機(jī)數(shù)生成函數(shù),該函數(shù)生成的隨機(jī)數(shù)隨機(jī)均勻分布于[0, 1)
區(qū)間。如果不提供參數(shù),np.random.random()
函數(shù)返回一個浮點(diǎn)型隨機(jī)數(shù)。np.random.random()
函數(shù)還可以接受一個整型或元組參數(shù),用于指定返回的浮點(diǎn)型隨機(jī)數(shù)數(shù)組的結(jié)構(gòu)(shape)。也有很多人習(xí)慣使用np.random.rand()
函數(shù)生成隨機(jī)數(shù),其功能和np.random.random()
函數(shù)一樣,知識np.random.rand()
函數(shù)不接受元組參數(shù),必須要寫成兩個整型參數(shù)
import numpy as np print(np.random.random()) print(np.random.random(2)) print(np.random.random((2,3)))
np.random.randint()
是另一個常用的隨機(jī)數(shù)生成函數(shù),該函數(shù)生成的隨機(jī)整數(shù)均勻分布于[low, high)
區(qū)間。如果省略low參數(shù),則默認(rèn)low的值等于0。np.random.randint()
函數(shù)還有一個默認(rèn)參數(shù)size
,用于指定返回的整型隨機(jī)數(shù)數(shù)組的結(jié)構(gòu)(shape)
print(np.random.randint(10)) print(np.random.randint(10, size=5)) print(np.random.randint(10, size=(2,5))) print(np.random.randint(10, 100, size=(2,5)))
2. 隨機(jī)抽樣
隨機(jī)抽樣是從指定的有序列表中隨機(jī)抽取指定數(shù)量的元素。隨機(jī)抽樣的應(yīng)用比較廣泛,如產(chǎn)品抽檢、抽簽順序等。NumPy的隨機(jī)抽樣函數(shù)是np.random.choice()
,其原型如下
np.random.choice(a, size=None, replace=True, p=None)
參數(shù)a表示待抽樣的全體樣本,它值接受整數(shù)或一維的數(shù)組(列表)。參數(shù)a如果是整數(shù),相當(dāng)于將數(shù)組np.arange(a)
作為全體樣本。參數(shù)size用于指定返回抽樣結(jié)果數(shù)組的結(jié)構(gòu)(shape)。參數(shù)replace用于指定是否允許多次抽取同一個樣本,默認(rèn)為允許。參數(shù)p是和全體樣本集合等長的權(quán)重數(shù)組,用于指定對應(yīng)樣本被抽中的概率。
import numpy as np print(np.random.choice(1,5)) # 抽簽樣本只有1個元素0,抽取5次 print(np.random.choice(['a','b','c'], size=(3,5), p=[0.5,0.25,0.25])) # 指定權(quán)重 print(np.random.choice(np.arange(100), size=(2,5), replace=False)) # 不允許重復(fù)
3. 正態(tài)分布
使用np.random.randn()
函數(shù)是最簡單的生成標(biāo)準(zhǔn)正態(tài)分布隨機(jī)數(shù)的方法。np.random.randn()
函數(shù)用于生成均值為0、標(biāo)準(zhǔn)差為1的正態(tài)分布(標(biāo)準(zhǔn)正態(tài)分布)的隨機(jī)數(shù)、該函數(shù)可以接受一個或兩個整型參數(shù),用來指定返回的符合標(biāo)準(zhǔn)正態(tài)分布的隨機(jī)數(shù)數(shù)組的結(jié)構(gòu)(shape)
import numpy as np print(np.random.randn()) # 標(biāo)準(zhǔn)正態(tài)分布,均值為0,標(biāo)準(zhǔn)差為1 print(np.random.randn(5)) print(np.random.randn(2,5))
如果需要生成非標(biāo)準(zhǔn)正態(tài)分布隨機(jī)數(shù),則應(yīng)該使用np.random.normal()
函數(shù)。np.random.nomal()
函數(shù)默認(rèn)生成均值為0、標(biāo)準(zhǔn)差為1的正態(tài)分布隨機(jī)數(shù)。參數(shù)loc用于指定均值,參數(shù)scale用于指定標(biāo)準(zhǔn)差,參數(shù)size用于指定返回的符合正態(tài)分布的隨機(jī)數(shù)數(shù)組的結(jié)構(gòu)(shape)。從下面的代碼可以看出,和使用默認(rèn)標(biāo)準(zhǔn)差相比,指定標(biāo)準(zhǔn)差為0.2時,數(shù)據(jù)分布更加靠近均值
print(np.random.normal()) # 默認(rèn)均值為0,標(biāo)準(zhǔn)差為1 print(np.random.normal(loc=2, size=5)) # 參數(shù)loc指定均值為2 print(np.random.normal(loc=2, scale=0.2, size=(2,5))) # 參數(shù)loc指定均值為2,參數(shù)scale指定標(biāo)準(zhǔn)差為0.2
4. 偽隨機(jī)數(shù)的深度思考
計算機(jī)程序或編程語言中的隨機(jī)數(shù)都是偽隨機(jī)數(shù)。因?yàn)橛嬎銠C(jī)硬件是確定的,代碼是固定的,算法是準(zhǔn)確的,通過這些確定的、固定的、準(zhǔn)確的東西不會產(chǎn)生真正的隨機(jī)數(shù),除非引入這個封閉系統(tǒng)以外的因素。計算機(jī)系統(tǒng)的隨機(jī)算法一般使用線性同余或平方取中的算法,通過一個種子(通常用時鐘代替)產(chǎn)生。這意味著,如果知道了種子和已經(jīng)產(chǎn)生的隨機(jī)數(shù),就可能獲得接下來隨機(jī)數(shù)序列的信息,這就是偽隨機(jī)數(shù)的可預(yù)測性
NumPy隨機(jī)數(shù)函數(shù)內(nèi)部使用了一個偽隨機(jī)數(shù)生成器,這個生成器每次實(shí)例化時都需要一個種子(整數(shù))完成初始化。如果兩次初始化的種子相同,則每次初始化后產(chǎn)生的隨機(jī)數(shù)序列就完全一致。np.random.seed()
函數(shù)可以指定偽隨機(jī)數(shù)生成器的初始化種子
import numpy as np np.random.seed(12345) # 使用'12345'隨機(jī)種子初始化偽隨機(jī)數(shù)生成器 print(np.random.random(5)) print(np.random.random((2,3))) np.random.seed(12345) # 再次使用'12345'隨機(jī)種子初始化偽隨機(jī)數(shù)生成器 print(np.random.random(5)) # 和上面完全一致 print(np.random.random((2,3))) # 和上面完全一致
從上述代碼匯總可以看出,只要指定相同的種子,接下來的隨機(jī)序列就完全一致。這意味著,只有從外部引入真正的隨機(jī)因子(如天空云朵的形狀、鄰居家無線網(wǎng)絡(luò)信號的強(qiáng)度等)作為種子,才可以得到真正的隨機(jī)數(shù)
此外,NumPy還提供了隨機(jī)數(shù)生成器,可以直接操作這個生成器來生成隨機(jī)數(shù)
r = np.random.RandomState(12345) # 使用隨機(jī)數(shù)生成器也同樣 print(r.random(5)) # 和上面完全一致 print(r.random((2,3))) # 和上面完全一致
到此這篇關(guān)于Python NumPy隨機(jī)抽模塊介紹及方法的文章就介紹到這了,更多相關(guān)Python NumPy 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python函數(shù)運(yùn)行內(nèi)存時間等性能檢測工具
這篇文章主要為大家介紹了python函數(shù)運(yùn)行內(nèi)存時間等性能檢測工具,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05Python使用captcha庫制作帶參數(shù)輸入驗(yàn)證碼案例
這篇文章主要介紹了Python使用captcha庫制作驗(yàn)證碼,帶參數(shù)輸入,本文通過實(shí)例案例解析給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Python?OpenCV中cv2.minAreaRect實(shí)例解析
minAreaRect的主要作用是獲取一個多邊形(就是有很多個點(diǎn)組成的一個圖形)的最小旋轉(zhuǎn)矩形(旋轉(zhuǎn)矩形就是我們平常見到的水平框帶了角度),這篇文章主要給大家介紹了關(guān)于Python?OpenCV中cv2.minAreaRect的相關(guān)資料,需要的朋友可以參考下2022-11-11如何利用python實(shí)現(xiàn)windows的批處理及文件夾操作
最近工作中需要幾個腳本運(yùn)行其他程序,幾乎像一個Windows批處理文件,這篇文章主要給大家介紹了關(guān)于如何利用python實(shí)現(xiàn)windows的批處理及文件夾操作的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-01-01python selenium 對瀏覽器標(biāo)簽頁進(jìn)行關(guān)閉和切換的方法
今天小編就為大家分享一篇python selenium 對瀏覽器標(biāo)簽頁進(jìn)行關(guān)閉和切換的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-05-05Python tkinter庫繪制春聯(lián)和福字的示例詳解
馬上要過年了,這篇文章將用到Python中的tkinter庫來寫一副春聯(lián)&福字送給大家。文中的實(shí)現(xiàn)方法講解詳細(xì),感興趣的小伙伴可以試一試2022-01-01