在使用numpy時,不免會用到隨機數生成器。我一直對np.random.seed(),隨機數種子搞不懂。不少博客也就粗略的說,利用隨機數種子,每次生成的隨機數相同。數組
我有兩個疑惑:1, 利用隨機數種子,每次生成的隨機數相同。這是什麼意思?dom
2,隨機數種子的參數怎麼選擇?在別人的代碼中常常看到np.random.seed(Argument),這個參數不同,有的是0,有的是1,固然還有其餘數。那這個參數應該怎麼選擇呢?函數
經過對別的博客的理解,我作了如下幾組實驗:spa
1.以np.random.randn()函數爲例.net
import numpy as np
if __name__ == '__main__':
i = 0
while(i<6):
if(i<3):
np.random.seed(0)
print(np.random.randn(1, 5))
else:
print(np.random.randn(1, 5))
pass
i += 1
i = 0
while(i<2):
print(np.random.randn(1, 5))
i += 1
print(np.random.randn(2, 5))
np.random.seed(0)
i = 0
while(i<8):
print(np.random.randn(1, 5))
i += 1
結果:code
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
[[ 0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]]
[[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
[[-1.45436567 0.04575852 -0.18718385 1.53277921 1.46935877]]
[[ 0.15494743 0.37816252 -0.88778575 -1.98079647 -0.34791215]
[ 0.15634897 1.23029068 1.20237985 -0.38732682 -0.30230275]]blog
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]]
[[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]]
[[ 0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 0.33367433 1.49407907 -0.20515826 0.3130677 -0.85409574]]
[[-2.55298982 0.6536186 0.8644362 -0.74216502 2.26975462]]
[[-1.45436567 0.04575852 -0.18718385 1.53277921 1.46935877]]
[[ 0.15494743 0.37816252 -0.88778575 -1.98079647 -0.34791215]]
[[ 0.15634897 1.23029068 1.20237985 -0.38732682 -0.30230275]]博客
經過該實驗咱們能夠獲得如下結論:class
1.1.能夠看出,像http://blog.csdn.net/linzch3/article/details/58220569這篇博客中提到的,np.random.seed()對後面的隨機數一次有效,而不是一直有效,這種說法是錯誤的。import
兩次利用隨機數種子後,即使是跳出循環後,生成隨機數的結果依然是相同的。第一次跳出while循環後,進入第二個while循環,獲得的兩個隨機數組確實和加了隨機數種子不同。可是,後面的加了隨機數種子的,八次循環中的結果和前面的結果是同樣的。說明,隨機數種子對後面的結果一直有影響。同時,加了隨機數種子之後,後面的隨機數組都是按必定的順序生成的。
1.2.在一樣的隨機種子後第六次的隨機數生成結果,(結果高亮部分),兩行五列的數組和兩個一行五列的數組結果相同。說明,在生成多行隨機數組時,是由單行隨機數組組合而成的。
如今咱們回答了第一個疑惑:利用隨機數種子,每次生成的隨機數相同。這是什麼意思? --就是使後面的隨機數按必定的順序生成。
2.
import numpy as np if __name__ == '__main__': i = 0 np.random.seed(0) while(i<3): print(np.random.randn(1, 5)) i += 1 i = 0 np.random.seed(1) i = 0 while(i<3): print(np.random.randn(1, 5)) i += 1
[[ 1.76405235 0.40015721 0.97873798 2.2408932 1.86755799]] [[-0.97727788 0.95008842 -0.15135721 -0.10321885 0.4105985 ]] [[ 0.14404357 1.45427351 0.76103773 0.12167502 0.44386323]]
[[ 1.62434536 -0.61175641 -0.52817175 -1.07296862 0.86540763]] [[-2.3015387 1.74481176 -0.7612069 0.3190391 -0.24937038]] [[ 1.46210794 -2.06014071 -0.3224172 -0.38405435 1.13376944]]
你能夠實驗,在你的電腦上,當隨機數種子參數爲0和1時,生成的隨機數和我上面高亮的結果相同。說明該參數指定了一個隨機數生成的起始位置。每一個參數對應一個位置。而且在該參數肯定後,其後面的隨機數的生成順序也就肯定了。
因此,如今咱們回答了個人第二個疑問:隨機數種子的參數怎麼選擇?我認爲隨意,這個參數只是肯定一下隨機數的起始位置。
以上只是個人我的看法,若是有不對的地方,請各位指正。