Numpy 隨機數


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.        ]]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM