簡體   English   中英

numpy.random狀態的差異消失了

[英]Discrepancy of the state of `numpy.random` disappears

同一項目的兩個python運行具有不同的設置,但具有相同的隨機種子。

該項目包含一個函數,該函數使用numpy.random.uniform返回幾個隨機數。

不管python進程中numpy.random的其他用途如何, numpy.random中的一系列函數調用都會生成相同的序列,直到某個時刻為止。

在那一點上一次產生不同的結果之后,它們又在一段時間內再次產生相同的序列。

我還沒有嘗試使用numpy.random.RandomState ,但是這怎么可能呢?

某處使用numpy.random引起差異並再次解決問題,這僅僅是一個巧合嗎?

我很好奇這是否是唯一的可能性,或者還有其他解釋。

提前致謝。

添加:我忘了提到當時還沒有播種。

在numpy中使用random模塊時,每個隨機生成的數字(無論分布/函數如何)都使用RandomState的相同“全局”實例。 使用numpy.random.seed()設置種子時,將設置numpy.random.seed()的“全局”實例的RandomState 這與Python中的random庫的原理相同。

我不確定numpy隨機函數的具體實現方式,但是我懷疑每個隨機函數都會使底層的Mersenne Twister前進多個“步驟”,而不同random函數之間的步驟數量不一定相同。

因此,如果在不同的運行之間每次調用random函數的順序都不相同,那么您可能會看到所生成的隨機數序列存在差異,如果Mersenne Twister再次“逐步”排列,則會再次收斂。

您可以通過為所使用的每個函數初始化一個單獨的RandomState實例來解決此問題。 例如:

import numpy as np

seed = 12345
r_uniform = np.random.RandomState(seed)
r_randint = np.random.RandomState(seed)

a_random_uniform_number = r_uniform.uniform()
a_random_int = r_randint.randint(10)

您可能想為每個實例設置不同的種子-這取決於您使用這些偽隨機數的目的。

暫無
暫無

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

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