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