如何用default_rng替代RandomState实现NumPy随机生成器状态恢复?
使用default_rng()替代RandomState实现随机状态保存与恢复
完全可行,NumPy的新随机数API(default_rng())支持保存和恢复生成器状态,实现断点续生成的功能。以下是修改后的代码及说明:
替换后的代码实现
import numpy as np from numpy.random import default_rng # 初始化生成器,种子42 rng = default_rng(42) # 第一次生成序列 i1 = rng.integers(low=0, high=2, size=10) print(i1) # 保存当前生成器状态 np.save('saved_state_rng.npy', rng.bit_generator.state, allow_pickle=True) # 第二次生成序列 i2 = rng.integers(low=0, high=2, size=10) print(i2) # 加载并恢复保存的状态 saved_state = np.load('saved_state_rng.npy', allow_pickle=True).item() rng.bit_generator.state = saved_state # 第三次生成序列(与第二次结果一致) i3 = rng.integers(low=0, high=2, size=10) print(i3)
关键说明
API差异处理:
- 旧API的
random_integers(low, high)是闭区间(包含high),新API的integers(low, high)是左闭右开区间,因此要生成0和1的随机整数,需设置high=2。
- 旧API的
状态保存与恢复:
default_rng()返回的Generator对象依赖底层的BitGenerator,其状态存储在rng.bit_generator.state(一个字典)中。- 使用
np.save()保存状态时需开启allow_pickle=True,因为状态是字典类型;加载时通过.item()取出字典,再赋值给rng.bit_generator.state完成恢复。
输出验证:
运行上述代码会得到与原代码一致的输出逻辑:第三次生成的序列与第二次完全相同,说明状态恢复成功。
内容的提问来源于stack exchange,提问作者hridayns
相关产品推荐
相关产品推荐

