![](/img/trans.png)
[英]How is numpy.random.Generator different from RandomState?
[英]How can I store and restore random state in numpy.random.generator instances?
我进行了快速搜索,发现的唯一相关问题是关于旧的 numpy.random 接口。 我正在尝试了解如何使用新界面。 我希望能够在给定的时间内运行一些模拟。 然后我想将随机数生成器 state 信息存储到一个文件中,以便我以后可以继续模拟。
我找到了一种方法来实现这一点,但在我看来这是一个坏主意,因为它没有记录在 API 的任何地方。 我想知道是否有一种我忽略的简单方法。
假设我使用以下代码开始模拟。
from numpy.random import Generator, PCG64
rg = Generator(PCG64(12345))
rg.standard_normal(1024)
save_to_file('state.txt', rg.bit_generator.state)
print(rg.standard_normal(8))
在这里, save_to_file
将rg.bit_generator.state
返回的字典保存到state.txt
。 现在,如果我想在以后继续处理我保存的模拟,我可以使用以下命令来完成。
from numpy.random import Generator, PCG64
rg = Generator(PCG64())
rg.bit_generator.state = load_from_file('state.txt')
print(rg.standard_normal(8))
这行得通,为我打印了相同的 8 个数字。 我通过检查 python 控制台中的 bit_generator object 想出了如何做到这一点。 我正在使用 Python 3.6.8 和 Numpy 1.18.4。 此处和此处有关 bit_generator object 的文档非常稀少,对于这种常见(至少在我的工作中)场景没有任何建议。
This answer to a similar question about the old interface似乎表明很难为Mersenne Twister(MT19937)获得这个,但我使用的PCG64算法似乎没有那么多内部state。 至少基于我提供的代码的成功。 有没有更好的方法来实现这一点? 一个被整个社区记录或宽恕的? 如果有一天我决定更新 Numpy,那么在没有充分记录的情况下不会破坏的东西。
通过rg
访问位生成器与声明pg = PCG64()
然后访问pg.state
。 通过 rg.bit_generator 访问没有任何问题。 文档有点稀缺,但如果您选择 BitGenerator,访问 BitGenerator.state 的 BitGenerator state 的文档允许您获取和设置 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.