繁体   English   中英

如何在 numpy.random.generator 实例中存储和恢复随机 state?

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

https://numpy.org/doc/stable/reference/random/bit_generators/generated/numpy.random.PCG64.state.ZFC35FDC70D5FC69D2693883A822C45A

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM