numpy.random包含多種概率分布的隨機樣本,是數據分析輔助的重點工具之一。
1.生成標准正態分布
# 隨機數生成 samples = np.random.normal(size=(4,4)) print(samples) # 生成一個標准正態分布的4*4樣本值
運行結果:
[[ 1.39503381e+00 -8.78976381e-01 -3.91561368e-01 1.53535114e+00] [ 2.42761416e-01 -9.14683577e-01 5.31498034e-01 -5.34133555e-01] [-8.23769059e-01 9.67241954e-01 1.32559619e+00 -5.99931949e-04] [ 1.16256260e+00 1.68124375e+00 -1.14891175e-01 2.29245845e+00]]
2.生成一個[0,1)之間的隨機浮點數或N維浮點數組 —— 均勻分布
# numpy.random.rand(d0, d1, ..., dn):生成一個[0,1)之間的隨機浮點數或N維浮點數組 —— 均勻分布 import matplotlib.pyplot as plt # 導入matplotlib模塊,用於圖表輔助分析 % matplotlib inline # 魔法函數,每次運行自動生成圖表 a = np.random.rand() print(a,type(a)) # 生成一個隨機浮點數 b = np.random.rand(4) print(b,type(b)) # 生成形狀為 c = np.random.rand(2,3) print(c,type(c)) # 生成形狀為2*3的二維數組,注意這里不是((2,3)) samples1 = np.random.rand(1000) samples2 = np.random.rand(1000) plt.scatter(samples1,samples2) # 生成1000個均勻分布的樣本值
運行結果:
0.45885369494340966 <class 'float'> [0.69046696 0.15681846 0.72039881 0.92133037] <class 'numpy.ndarray'> [[0.06343286 0.53977786 0.50854073] [0.14302969 0.49934197 0.27444025]] <class 'numpy.ndarray'>
3.numpy.random.randn(d0, d1, ..., dn):生成一個浮點數或N維浮點數組 —— 正態分布
samples1 = np.random.randn(1000) samples2 = np.random.randn(1000) plt.scatter(samples1,samples2) # randn和rand的參數用法一樣 # 生成1000個正太的樣本值
4. 隨機生成一個整數
# numpy.random.randint(low, high=None, size=None, dtype='l'):生成一個整數或N維整數數組 # 若high不為None時,取[low,high)之間隨機整數,否則取值[0,low)之間隨機整數,且high必須大於low # dtype參數:只能是int類型 print(np.random.randint(2)) # low=2:生成1個[0,2)之間隨機整數 print(np.random.randint(2,size=5)) # low=2,size=5 :生成5個[0,2)之間隨機整數 print(np.random.randint(2,6,size=5)) # low=2,high=6,size=5:生成5個[2,6)之間隨機整數 print(np.random.randint(2,size=(2,3))) # low=2,size=(2,3):生成一個2x3整數數組,取數范圍:[0,2)隨機整數 print(np.random.randint(2,6,(2,3))) # low=2,high=6,size=(2,3):生成一個2*3整數數組,取值范圍:[2,6)隨機整數
運行結果:
1 [1 0 0 0 1] [2 5 3 5 5] [[0 0 0] [0 0 1]] [[5 2 3] [2 5 3]]
5.使程序每次運行生成的隨機數是相同的——隨機數種子
# 隨機種子 # 計算機實現的隨機數生成通常為偽隨機數生成器,為了使得具備隨機性的代碼最終的結果可復現,需要設置相同的種子值 rng = np.random.RandomState(1) #1為種子,種子不一樣,生成的隨機數也不一樣,但是對每個種子來說,每次運行所生成的隨機數是相同的 xtrain = 10 * rng.rand(30) ytrain = 8 + 4 * xtrain + rng.rand(30) # np.random.RandomState → 隨機數種子,對於一個隨機數發生器,只要該種子(seed)相同,產生的隨機數序列就是相同的 # 生成隨機數據x與y # 樣本關系:y = 8 + 4*x fig = plt.figure(figsize =(12,3)) ax1 = fig.add_subplot(1,2,1) plt.scatter(xtrain,ytrain,marker = '.',color = 'k') plt.grid() plt.title('樣本數據散點圖') # 生成散點圖
測試:
import numpy as np rng2 = np.random.RandomState(1) rng2.randn(3,2)
運行:
array([[ 1.62434536, -0.61175641], [-0.52817175, -1.07296862], [ 0.86540763, -2.3015387 ]])
練習1:
請按照要求創建數組ar,再將ar[:2,:2]的值改為[0,1)的隨機數
import numpy as np ar = np.arange(25.0).reshape(5,5) print(ar) ar[:2,:2] = np.random.rand(2,2) print(ar)
運行結果:
[[ 0.83651399 0.69131755 2. 3. 4. ] [ 0.78268105 0.242201 7. 8. 9. ] [10. 11. 12. 13. 14. ] [15. 16. 17. 18. 19. ] [20. 21. 22. 23. 24. ]]