繁体   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