首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何访问numpy默认全局随机数生成器

如何访问numpy默认全局随机数生成器
EN

Stack Overflow用户
提问于 2017-02-02 01:03:36
回答 3查看 1.8K关注 0票数 9

我需要创建一个接受随机数生成器(即numpy.random.RandomState对象)作为参数的类。在未指定此参数的情况下,我想将其分配给numpy在运行numpy.random.<random-method>时使用的随机生成器。如何访问这个全局生成器?目前,我只是通过将模块对象指定为随机生成器(因为它们共享方法/鸭子类型)来做到这一点。然而,这会导致在酸洗(无法酸洗模块对象)和深度复制时出现问题。我想在numpy.random后面使用RandomState对象

PS:我使用的是python-3.4

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-02-02 01:30:27

正如kazemakase所建议的那样,我们可以利用这样一个事实,即像numpy.random.random这样的模块级函数实际上是隐藏的numpy.random.RandomState的方法,通过直接从这些方法中的一个中提取__self__

代码语言:javascript
复制
numpy_default_rng = numpy.random.random.__self__
票数 4
EN

Stack Overflow用户

发布于 2017-02-02 01:25:41

numpy.randomnumpy.random.mtrand导入*,这是一个用Cython语言编写的扩展模块。source code显示全局状态存储在变量_rand中。这个变量通过is not imported进入numpy.random作用域,但您可以直接从mtrand获取它。

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2017-02-02 01:40:38

我不知道如何访问全局状态。但是,您可以使用RandomState对象并传递它。随机分布被附加到它上面,所以你将它们作为方法调用。

示例:

代码语言:javascript
复制
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))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41985484

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档