欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python之numpy.random.seed()和numpy.random.RandomState()區(qū)別及說明

 更新時間:2024年06月13日 11:20:06   作者:pangpd  
這篇文章主要介紹了Python之numpy.random.seed()和numpy.random.RandomState()區(qū)別及說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教

前言

在使用深度學習處理數據數,為了保證樣本的隨機分布和實驗的可復現性,經常會使用到numpy.random.seed()和numpy.random.RandomState()兩個函數,這個兩個函數有什么用法和區(qū)別?

numpy.random.seed()

有個博主介紹的非常棒:

  • seed()里的數字就相當于設置了一個盛有隨機數的“聚寶盆”,一個數字代表一個“聚寶盆”。
  • 當在seed()的括號里設置相同的seed,“聚寶盆”就是一樣的,當然每次拿出的隨機數就會相同。
  • 如果不設置seed,則每次會生成不同的隨機數,但是有時候明明設置了seed()沒有變,生成的隨機數組還是不同。

意思是說,seed()函數中是可以傳入整型數字,程序會根據輸入的數字產生一組隨機數,只要保證傳入的數字持續(xù)不變,那么產生的隨機數也是固定不變的,如下代碼:

np.random.seed(2)
print(np.random.rand(10))
[0.4359949  0.02592623 0.54966248 0.43532239 0.4203678  0.33033482
 0.20464863 0.61927097 0.29965467 0.26682728]
 
np.random.seed(2)
print(np.random.rand(10))
[0.4359949  0.02592623 0.54966248 0.43532239 0.4203678  0.33033482
 0.20464863 0.61927097 0.29965467 0.26682728]

但是有一種情況需要注意:

np.random.seed(2)
print(np.random.rand(10))
[0.4359949  0.02592623 0.54966248 0.43532239 0.4203678  0.33033482
 0.20464863 0.61927097 0.29965467 0.26682728]
 
print(np.random.rand(10))
[0.62113383 0.52914209 0.13457995 0.51357812 0.18443987 0.78533515
 0.85397529 0.49423684 0.84656149 0.07964548]

第二個的np.random.rand(2)已經不是在你設置的np.random.seed(2)下了,所以第二個的隨機數組只是在默認random下隨機挑選的樣本數值。

numpy.random.RandomState()

numpy.random.RandomState()是一個偽隨機數生成器。

那么偽隨機數是什么呢?

  • 偽隨機數是用確定性的算法計算出來自[0,1]均勻分布的隨機數序列。
  • 并不真正的隨機,但具有類似于隨機數的統(tǒng)計特征,如均勻性、獨立性等。
  • 在計算偽隨機數時,若使用的初值(種子)不變,那么偽隨機數的數序也不變。偽隨機數可以用計算機大量生成,在模擬研究中為了提高模擬效率,一般采用偽隨機數代替真正的隨機數。
  • 模擬中使用的一般是循環(huán)周期極長并能通過隨機數檢驗的偽隨機數,以保證計算結果的隨機性。

傳入相同的seed,產生相同的隨機數,如下代碼:

import numpy as np
rng = np.random.RandomState(2)
rng.rand(5)
Out[10]: array([0.4359949 , 0.02592623, 0.54966248, 0.43532239, 0.4203678 ])

rng = np.random.RandomState(2)
rng.rand(5)
Out[11]: array([0.4359949 , 0.02592623, 0.54966248, 0.43532239, 0.4203678 ])

因為是偽隨機數,所以必須在rng這個變量下使用,如果不這樣做,那么就得不到相同的隨機數組了,即便再次輸入了numpy.random.RandomState(),如下代碼:

np.random.RandomState(2)
np.random.rand(5)
Out[12]: array([0.50524609, 0.0652865 , 0.42812233, 0.09653092, 0.12715997])

np.random.RandomState(2)
np.random.rand(5)
Out[13]: array([0.59674531, 0.226012  , 0.10694568, 0.22030621, 0.34982629])

同樣,和numpy.random.seed()相似,下面情況,第二個的rng.rand(5)已經不是在你設置的np.random.RandomState(2)下了。如下代碼:

rng = np.random.RandomState(2)
x = rng.rand(5)
y = rng.rand(5)
print(x)
[0.4359949  0.02592623 0.54966248 0.43532239 0.4203678 ]
print(y)
[0.33033482 0.20464863 0.61927097 0.29965467 0.26682728]

總結

參數:seed

  • seed可以是一個int,滿足0<=seed<=2(32−1),這個條件的int都可以做參數。
  • seed可以是一個array。
  • seed可以是None。

用一句話總結numpy.random.seed()和numpy.random.RandomState()的關系:

  • 相同處: 他們的參數都是隨機數seed
  • 不同處: numpy.random.RandomState()更為復雜,完全可以代替
  • numpy.random.seed()這條語句 隨機數種子seed只有一次有效,在下一次調用產生隨機數函數前沒有設置seed,則還是產生隨機數。

1.如果需要不產生隨機數,則需要每次設置numpy.random.seed()。

>>> import numpy
>>> #注意這里是兩條語句
>>> numpy.random.seed(0);numpy.random.rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>>numpy.random.seed(0);numpy.random.rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>>numpy.random.seed(0);numpy.random.rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318]

2.如果需要每次都產生隨機數,則可以將隨機數seed設置成None,或者不設置。

>>> import numpy
>>> numpy.random.seed(None)
>>> numpy.random.rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>> numpy.random.rand(4)
array([ 0.4236548 ,  0.64589411,  0.43758721,  0.891773  ])
>>> numpy.random.rand(4)
array([ 0.96366276,  0.38344152,  0.79172504,  0.52889492])

同理,RandomState產生相同數據和不同數據

>>> import numpy
# 產生相同數據
>>> numpy.random.RandomState(0).rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>> numpy.random.RandomState(0).rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>> numpy.random.RandomState(0).rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])

# None 產生不同數據
>>> numpy.random.RandomState(None).rand(4)
array([ 0.5488135 ,  0.71518937,  0.60276338,  0.54488318])
>>> numpy.random.RandomState(None).rand(4)
array([ 0.4236548 ,  0.64589411,  0.43758721,  0.891773  ])
>>> numpy.random.RandomState(None).rand(4)
array([ 0.96366276,  0.38344152,  0.79172504,  0.52889492])

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:

相關文章

最新評論