隨機種子 seed()到底是怎麼回事。

2021-09-24 16:04:46 字數 1574 閱讀 9867

讓我們先來看一段**,熟悉一下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結果的隨機性。 不過這仍然算不上是完全隨機,因為重複的概率還是千分之一。

總之如果種子沒有變,產生的隨機數就不會變的。

炒股到底是怎麼回事?

到底是怎麼回事?很久就聽說 有人賺死,有人虧死。只是聽別人說,自己沒多大興趣,因為聽說風險太大,並且虧的可能性很大,呵呵,誰願意去做八成可能虧的買賣呢?但昨天在sohu上看到一條新聞,引起我對它的興趣,所以今天了解了一下。其實我覺得道理好像很簡單,就是你拿一部分錢跟你兄弟說 兄弟,咱們合夥搞一莊生意...

記憶體對齊到底是怎麼回事?

記憶體對齊問題是各種開發類面試中最熱門的問題,面試管一般認為這個問題可以考察被面試者對記憶體細節的了解情況,確實這個問題對於c 初學者來說是個十足的難題因為它不僅涉及了pragma pack n 設定的記憶體對齊係數還涉及了相關記憶體分配的細節。記憶體對齊 我們知道現代計算機體系中cpu按照雙字 字...

這到底是怎麼回事呀?

這到底是怎麼回事呀?delphi windows sdk api 怎麼我寫了一段程式,刪除滿足條件的記錄!我已經把requestlive屬性設計有true 怎麼回事!哪位大蝦幫下忙!非常感謝!下面是程式的一小段 按棟刪除學生 if radiobutton6.checked true then beg...