簡體   English   中英

跨平台 numpy.random.seed()

[英]cross platform numpy.random.seed()

文檔說:

兼容性保證固定種子和使用相同參數對“RandomState”方法的固定系列調用將始終產生相同的結果直至出現舍入誤差,除非值不正確。 不正確的值將得到修復,並且在相關文檔字符串中會注明進行修復的 NumPy 版本。 只要以前的行為保持不變,就允許擴展現有參數范圍和添加新參數。

沒有提到操作系統。

如果我在windows和linux上調用np.random.seed(42) ,之后生成的隨機數是否相同? 在不同版本的 64 位 Ubuntu 中是否相同?

我假設 rng 使用系統庫,所以代碼可能不可移植。 如果那是真的,有解決辦法嗎? 我知道這可能很丑陋,例如將 linux rng 系統更改為模擬 windows 的系統。但我已准備好創造性的解決方案。

更新自numpy v1.17 (2019 年年中):
結果應該跨平台相同,但跨 numpy 版本不同。

np.random.seed被描述為“方便的遺留功能”; 它和更新的/推薦的替代np.random.default_rng不能再依賴於在 numpy 版本中產生相同的結果,除非專門使用 np.random.RandomState 提供的遺留/兼容性np.random.RandomState 雖然 RandomState 模塊保證提供一致的結果,但它不會隨着算法(或正確性)改進而更新,並且不鼓勵在單元測試和向后兼容性之外使用。

請參閱NEP 0019:隨機數生成器策略 這實際上是一本不錯的書:)摘要如下:

在過去的十年中,NumPy 對其所有隨機數分布的數字 stream 都有嚴格的向后兼容性政策。 與 numpy 中的其他數值組件不同,如果它們保持正確,通常允許在修改結果時返回不同的結果,我們強制隨機數分布在每個版本中始終產生完全相同的數字。 我們的流兼容性保證的目標是為 numpy 版本的模擬提供精確的可重復性,以促進可重復的研究。 然而,這一政策使得使用更快或更准確的算法來增強任何分布變得非常困難。 經過十年對科學軟件生態系統的經驗和改進,我們相信現在有更好的方法來實現這些目標。 我們建議放寬我們嚴格的流兼容性政策,以消除接受對我們的隨機數生成功能的貢獻的障礙。

這已在 numpy 中實現。截至當前寫作(numpy 版本 1.22), numpy.random.default_rng()使用默認的BitGenerator構造一個新的Generator 但在np.random.Generator的描述中,附上了以下指導:

無兼容性保證

Generator 不提供版本兼容性保證。 特別是,隨着更好的算法的發展,位 stream 可能會發生變化。

因此,使用np.random.default_rng()將跨平台保留相同版本 numpy 的隨機數,但不會跨版本。 確保再現性的最佳實踐是保存您的確切環境,例如在 docker 容器中。 除此之外,存儲隨機生成的數據的結果並在下游工作流中使用保存的結果可以幫助提高可重復性,盡管這當然不會像 docker 容器那樣使您免於稍后在工作流中發生 API 更改。

根據 sascha 的評論,隨機數與平台無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM