1. 程式人生 > >Python的numpy庫rand(),randn(),randint(),random_integers()等random系函式的用法

Python的numpy庫rand(),randn(),randint(),random_integers()等random系函式的用法

使用Python進行資料處理時,往往需要用到大量的隨機資料,那如何構造這麼多資料呢?Python的第三方庫numpy庫中提供了random函式來實現這個功能。

首先匯入numpy,下面所有的程式碼都預設匯入了 numpy,即下面的程式碼:

import numpy as np

首先說下numpy.random.seed()與numpy.random.RandomState()這兩個在資料處理中比較常用的函式,兩者實現的作用是一樣的,都是使每次隨機生成數一樣

np.random.seed(1)
np.random.rand(8)

result:

array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
np.random.seed(1)
np.random.rand(8)

result:

array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])

再看numpy.random.RandomState():

rng=np.random.RandomState(1)
rng.rand(8)

result:

array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])
rng=np.random.RandomState(1)
rng.rand(8)

result:

array([4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01,
       1.46755891e-01, 9.23385948e-02, 1.86260211e-01, 3.45560727e-01])

可以看到上述四個隨機數結果是 一樣的

1、numpy.random.rand()
官方文件中給出的用法是: np.random.rand(d0,d1,d2.....dn)
以給定的形狀建立一個數組,並在陣列中加入在[0,1]之間均勻分佈的隨機數樣本
用法及實現

np.random.rand(2,3)

result:

array([[0.87638915, 0.89460666, 0.08504421],
       [0.03905478, 0.16983042, 0.8781425 ]])

2、numpy.random.randn()
官方文件中給出的用法是:numpy.random.randn(d0,d1,…dn)
以給定的形狀建立一個數組,陣列元素符合標準正態分佈 N(0,1)
若要得到一般的正態分佈 N(mu,sigma*sigma),則可以用 sigma*np.random.randn(....)+mu 進行表示
用法及實現

np.random.randn(2,3)

result:

array([[-0.17242821, -0.87785842,  0.04221375],
       [ 0.58281521, -1.10061918,  1.14472371]])

3、numpy.random.randint()
官方文件中給出的用用法是: np.random.randint(low,high=None,size=None,dtype)
生成在半開閉區間[low,high)上離散均勻分佈的整數值;若 high=None,則取值區間變為[0,low)
用法及實現

# high = None
np.random.randint(5,size=(2,3))

result:

array([[4, 2, 4],
       [0, 3, 1]])
# high != None
np.random.randint(2,high=5,size=(2,3))

result:

array([[4, 2, 2],
       [3, 4, 4]])
np.random.randint(0,15)  # 這裡未指定 size,只生成一個

result:

6

4、numpy.random.random_integers()
#官方文件中給出的用法是:numpy.random.random_integers(low,high=None,size=None)
#生成閉區間[low,high]上離散均勻分佈的整數值;若high=None,則取值區間變為[1,low]
#用法及實現

# high = None
np.random.random_integers(5,size=(2,3))

result:

/home/zp/ProgramData/Anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:2: DeprecationWarning: This function is deprecated. Please call randint(1, 5 + 1) instead
  

array([[2, 4, 5],
       [4, 2, 4]])

上述的結果中有一段廢棄警告,大致意思是:Python3.6將不再使用 random.random_integers(),可以使用 randint() 代替

np.random.randint(1,5+1,size=(2,3))

result:

array([[1, 3, 3],
       [2, 4, 5]])
# high != None
np.random.random_integers(2,high=5,size=(2,3))

result:

/home/zp/ProgramData/Anaconda3/lib/python3.6/site-packages/ipykernel_launcher.py:1: DeprecationWarning: This function is deprecated. Please call randint(2, 5 + 1) instead
  """Entry point for launching an IPython kernel.

array([[4, 4, 4],
       [2, 2, 5]])
np.random.randint(2,6,size=(2,3))

result:

array([[5, 3, 3],
       [3, 5, 2]])

5、numpy.random.random_sample()
官方文件中給出的用法是:numpy.random.random_sample(size=None)
以給定形狀返回[0,1)之間的隨機浮點數
用法及實現

np.random.random_sample(size=(2,3))

result:

array([[0.53589641, 0.66379465, 0.51488911],
       [0.94459476, 0.58655504, 0.90340192]])
np.random.random_sample()

result:

0.13747470414623753

其他函式,numpy.random.random() ;numpy.random.ranf() numpy.random.sample()用法及實現都與它相同

6、numpy.random.choice()
官方文件中給出的用法: np.random.choice(a,size=None,replace=True,p=None)
若 a 為陣列,則從 a 中選取元素;若 a 為單個 int 型別數,則選取 range(a) 中的數
replace 是bool 型別,為 True,則選取的元素會出現重複,反之不會出現重複
p 為陣列,裡面存放選到每個數的可能性,即 概率

np.random.choice(5,size=4,replace=True,p=[0.1,0.1,0.3,0.4,0.1])

result:

array([2, 4, 3, 3])
np.random.choice(5,size=4,replace=False,p=[0.1,0.1,0.3,0.4,0.1])

result:

array([1, 4, 2, 3])