小编Bon*_*vie的帖子

Python:使用上下文管理器临时更改随机种子的危险?

当使用随机数生成器在Python代码中重现性时,推荐的方法似乎是构造单独的RandomState对象.不幸的是,像scipy.stats这样的基本软件包不能(据我所知)设置为使用特定的RandomState,而只使用numpy.random的当前状态.我目前的解决方法是使用上下文管理器来保存RNG的状态,然后在退出时重置它,如下所示:

class FixedSeed:
    def __init__(self, seed):
        self.seed = seed
        self.state = None

    def __enter__(self):
        self.state = rng.get_state()
        np.random.seed(self.seed)

    def __exit__(self, exc_type, exc_value, traceback):
        np.random.set_state(self.state)
Run Code Online (Sandbox Code Playgroud)

文档中有很多关于以任何方式更改状态的警告 - 上述方法一般是安全的吗?(从某种意义上说,更改是上下文的本地更改,而我的其余代码将不受影响)

python random numpy contextmanager random-seed

6
推荐指数
1
解决办法
834
查看次数

标签 统计

contextmanager ×1

numpy ×1

python ×1

random ×1

random-seed ×1