Numpy 隨機數(shù)
numpy.random 模塊對 Python 內(nèi)置的 random 進行了補充,增加了一些用于高效生成符合多種概率分布的樣本值的函數(shù)。這一小節(jié)將詳述如何用 Numpy 快速創(chuàng)建隨機數(shù)矩陣。
1. 創(chuàng)建符合均勻分布的隨機數(shù)組
1.1 numpy.random.rand 函數(shù)
numpy.random.rand 函數(shù)通常用來創(chuàng)建一個服從 “0~1” 均勻分布的隨機浮點數(shù)(組),隨機樣本取值范圍是[0,1)。函數(shù)調(diào)用方法如下:
numpy.random.rand(d0, d1, ..., dn)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
d0, d1, …, dn | 表征生成數(shù)組的維數(shù),若不指定則默認(rèn)返回一個浮點數(shù)。 |
案例
最簡單的情況,當(dāng)不指定任何參數(shù)的時候,生成 0-1 之間的隨機浮點數(shù):
np.random.rand()
Out:
0.014109814461294223
相應(yīng)地,也可以指定產(chǎn)生一個固定維度的數(shù)組,例如希望生成一個指定維度為 3×2,服從 “0-1” 均勻分布的數(shù)組,可以用如下語句順利實現(xiàn):
np.random.rand(3, 2)
Out:
array([[0.14222306, 0.63311185],
[0.01911767, 0.91424813],
[0.86915706, 0.23034553]])
1.2 numpy.random.uniform 函數(shù)
numpy.random.uniform 函數(shù)可以用來創(chuàng)建一個在指定區(qū)間內(nèi)符合均勻分布的隨機數(shù)(組)。函數(shù)調(diào)用方法如下:
numpy.random.uniform(low=0.0, high=1.0, size=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
low | 采樣下界,默認(rèn)值為0; |
high | 采樣上界,默認(rèn)值為1;采樣區(qū)間為[low, high) |
size | 樣本維數(shù),為int或tuple類型 |
案例
在默認(rèn)情況下,即無任何傳參的時候,numpy.random.uniform 和 numpy.random.rand 函數(shù)效果類似:
np.random.uniform()
Out:
0.01472448451244368
其功能都是產(chǎn)生一個 0-1 之間隨機浮點數(shù)。
在實際應(yīng)用中,uniform 函數(shù)的功能更加強大一些。例如,可以創(chuàng)建一個在0-10之間均勻采樣的4×4方陣:
np.random.uniform(0, 10, size=(4,4))
Out:
array([[9.4065469 , 3.38814606, 7.76009959, 5.56976042],
[5.39726103, 5.99217826, 1.42095879, 6.53239593],
[7.41342354, 0.91189054, 9.27952511, 5.98864329],
[1.26426182, 9.541969 , 3.74923191, 5.0722331 ]])
1.3 numpy.random.randint 函數(shù)
numpy.random.randint 函數(shù)可以用來創(chuàng)建一個在指定區(qū)間內(nèi)符合均勻分布的隨機整數(shù)(數(shù)組)。函數(shù)調(diào)用方法如下:
numpy.random.randint(low, high=None, size=None, dtype='l')
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
low | 采樣下界,整數(shù)類型。當(dāng)high不指定時,采樣區(qū)間為[0, low) |
high | 采樣上界,可選。采樣區(qū)間為[low, high) |
size | 樣本維數(shù),為int或tuple類型 |
dtype | 數(shù)組數(shù)據(jù)類型,可選 |
案例
在只指定 low 參數(shù)的時候,可以用來產(chǎn)生一個隨機整數(shù):
np.random.randint(10)
Out:
5
類似地,也可以在更大范圍內(nèi)采樣。例如,對 0-100 之間整數(shù)均勻采樣:
np.random.randint(0, 100, size=10, dtype=np.int16)
Out:
array([ 9, 59, 47, 52, 50, 16, 49, 20, 82, 0], dtype=int16)
可以觀察發(fā)現(xiàn):size 取整數(shù)值時,返回結(jié)果為一維數(shù)組。
2. 創(chuàng)建符合正態(tài)分布的隨機數(shù)組
正態(tài)分布是一種更為常見的特征分布。Numpy 也提供了相應(yīng)的函數(shù)。
2.1 numpy.random.randn函數(shù)
numpy.random.randn 函數(shù)可以用來創(chuàng)建一個指定維度的、符合標(biāo)準(zhǔn)正態(tài)分布(以0為均值、1為標(biāo)準(zhǔn)差)的浮點數(shù)(數(shù)組)。函數(shù)調(diào)用方法如下:
numpy.random.randn(d0, d1, ..., dn)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
d0, d1, …, dn | 表征生成數(shù)組的維數(shù),若不指定則默認(rèn)返回一個浮點數(shù)。 |
案例
最簡單的情況,當(dāng)不指定任何參數(shù)的時候,生成 0-1 之間的隨機浮點數(shù):
np.random.randn()
Out:
-0.12290005859272764
相應(yīng)地,也可以指定產(chǎn)生一個固定維度的數(shù)組,例如希望生成一個指定維度為 3×2,服從 “0-1” 均勻分布的數(shù)組,可以用如下語句順利實現(xiàn):
np.random.randn(3, 2)
Out:
array([[-0.57391562, 0.06713778],
[ 1.06383981, -0.36837876],
[ 1.21325918, 2.83456824]])
可以發(fā)現(xiàn),numpy.random.randn 函數(shù)和 numpy.random.rand 函數(shù)的調(diào)用規(guī)則非常相似,不同的地方在于產(chǎn)生隨機數(shù)的分布不一樣。
2.2 numpy.random.normal函數(shù)
numpy.random.normal 函數(shù)可以用來創(chuàng)建一個指定維度的、符合指定正態(tài)分布(以loc為均值、scale為標(biāo)準(zhǔn)差)的浮點數(shù)(數(shù)組)。函數(shù)調(diào)用方法如下:
numpy.random.normal(loc=0.0, scale=1.0, size=None)
構(gòu)造函數(shù)接受的參數(shù)詳解如下:
參數(shù) | 描述 |
---|---|
loc | 采樣樣本分布的均值 |
scale | 采樣樣本分布的標(biāo)準(zhǔn)差 |
size | 樣本維數(shù),為int或tuple類型 |
案例
在不指定均值和標(biāo)準(zhǔn)差的時候,numpy.random.normal 會產(chǎn)生一個符合標(biāo)準(zhǔn)正態(tài)分布的浮點數(shù):
np.random.normal()
Out:
-0.8810020954896429
相應(yīng)地,也可以指定分布特征。例如:產(chǎn)生一個大小為 3×2,符合均值為 5,標(biāo)準(zhǔn)差為 10 的正態(tài)分布的數(shù)組:
arr_rand3 = np.random.normal(5, 10, (3, 2))
Out:
array([[ -7.77480714, -2.68529581],
[ 4.40425363, -8.39891281],
[-13.08126657, -9.74238828]])
3. 小結(jié)
本節(jié)主要介紹了利用 Numpy 內(nèi)置的 random 方法,創(chuàng)建均勻分布和正態(tài)分布的數(shù)組。和 Python 內(nèi)置的 random 模塊不同的是,在 Numpy 中,你可以指定 size 參數(shù),來快速生成數(shù)組集合,效率較random 模塊有了很大的提升。