[英]How to access numpy default global random number generator
我需要創建一個類,它接受一個隨機數生成器(即一個numpy.random.RandomState
對象)作為參數。 在未指定此參數的情況下,我想將它分配給numpy在運行numpy.random.<random-method>
時使用的隨機生成器。 如何訪問此全局生成器? 目前我這樣做只是將模塊對象指定為隨機生成器(因為它們共享方法/鴨子類型)。 然而,當酸洗(無法腌制模塊對象)和深度復制時,這會導致問題。 我想使用numpy.random后面的RandomState對象
PS:我正在使用python-3.4
numpy.random
進口*來自numpy.random.mtrand
,這是一個用Cython編寫的擴展模塊。 源代碼顯示全局狀態存儲在變量_rand
。 此變量未導入 numpy.random
范圍,但您可以直接從mtrand獲取它。
import numpy as np
from numpy.random.mtrand import _rand as global_randstate
np.random.seed(42)
print(np.random.rand())
# 0.3745401188473625
np.random.RandomState().seed(42) # Different object, does not influence global state
print(np.random.rand())
# 0.9507143064099162
global_randstate.seed(42) # this changes the global state
print(np.random.rand())
# 0.3745401188473625
除了kazemakase建議的內容之外,我們還可以利用numpy.random.random
等模塊級函數實際上是隱藏numpy.random.RandomState
的方法,直接從其中一個方法中拉出__self__
:
numpy_default_rng = numpy.random.random.__self__
我不知道如何訪問全局狀態。 但是,您可以使用RandomState對象並將其傳遞。 隨機分布附加到它,因此您將它們稱為方法。
例:
import numpy as np
def computation(parameter, rs):
return parameter*np.sum(rs.uniform(size=5)-0.5)
my_state = np.random.RandomState(seed=3)
print(computation(3, my_state))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.