讓我們先來看一段**,熟悉一下seed()的使用:
import numpy as np
num = 0
while (num < 5):
np.random.seed(1)
print(np.random.random())
num += 1
print(』-------------------------』)
num1 = 0
np.random.seed(2)
while (num1 < 5):
print(np.random.random())
num1 += 1
其執行結果是:
0.417022004702574
0.417022004702574
0.417022004702574
0.417022004702574
0.417022004702574
-------------------------
0.43599490214200376
0.025926231827891333
0.5496624778787091
0.4353223926182769
0.42036780208748903
通過上面的兩個例子的對比我們可以發現:第乙個例子中列印的隨機數的一樣的,但是第二個例子中列印的是不同的隨機數,這是為什麼呢?
其實啊,所謂的隨機數其實是偽隨機數,所謂的『偽』,意思是這些數其實是有規律的,只不過因為演算法規律太複雜,很難看出來。但是在複雜的演算法都要乙個初始值,如果沒有乙個初始值,他也不能憑空製造一系列的隨機數出來,那我們說的隨機種子seed()就是這是初始值。
讓我們看看random隨機數是怎麼生成的:我們將這套複雜的演算法(是叫隨機數生成器吧)看成乙個黑盒,把我們準備好的種子扔進去,它會返給你兩個東西,乙個是你想要的隨機數,另乙個是保證能生成下乙個隨機數的新的種子,把新的種子放進黑盒,又得到乙個新的隨機數和乙個新的種子,從此在生成隨機數的路上越走越遠。
現在來看看**:
第一段**把對種子的設定放在了迴圈裡面,每次執行迴圈都旗幟鮮明地告訴黑盒:「我的種子是1」。那麼很顯然:同乙個黑盒,同乙個種子,自然得到的是同乙個隨機數。
第二段**把對種子的設定放在了迴圈外面,他只在第一次迴圈的時候明確地告訴黑盒:「我的種子是2」。那麼也很顯然:從第二次迴圈開始,黑盒用的就是自己生成的新種子了。
另外再說一下:所有標準庫提供的random函式其實都是假random,提供的隨機數也是偽隨機數,真正的random函式式不需要seed的。所謂假random,是指所返回的隨機數字其實是乙個穩定演算法所得出的穩定結果序列,而不是真正意義上的隨機序列。 seed就是這個演算法開始計算的第乙個值。所以就會出現只要seed是一樣的,那麼後續所有「隨機」結果和順序也都是完全一致的。 通常情況下,你可以用 datetime.now.millisecend() 也就是當前始終的毫秒來做seed .因為毫秒對你來說是乙個1000以內的隨即數字。 這樣可以大大改善保準庫的random結果的隨機性。 不過這仍然算不上是完全隨機,因為重複的概率還是千分之一。
總之如果種子沒有變,產生的隨機數就不會變的。
讓我們先來看一段**,熟悉一下seed()的使用:
import numpy as np
Others 隨機種子
首先,我們來看一段 猜數字小遊戲 include include const int left 1 const int right 100 void guessnumber else if answer target else intmain 我們執行程式,效果如下 我們關掉程式,清理解決方案,然後...
隨機種子講解
在使用numpy時,難免會用到隨機數生成器。我一直對np.random.seed 隨機數種子搞不懂。很多部落格也就粗略的說,利用隨機數種子,每次生成的隨機數相同。我有兩個疑惑 1,利用隨機數種子,每次生成的隨機數相同。這是什麼意思?2,隨機數種子的引數怎麼選擇?在別人的 中經常看到np.random...
怎樣理解隨機種子
在使用numpy時,難免會用到隨機數生成器。我一直對np.random.seed 隨機數種子搞不懂。很多部落格也就粗略的說,利用隨機數種子,每次生成的隨機數相同。我有兩個疑惑 1,利用隨機數種子,每次生成的隨機數相同。這是什麼意思?2,隨機數種子的引數怎麼選擇?在別人的 中經常看到np.random...