簡體   English   中英

如何訪問numpy默認全局隨機數生成器

[英]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.

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