You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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)

关键说明

  1. API差异处理:

    • 旧API的random_integers(low, high)是闭区间(包含high),新API的integers(low, high)是左闭右开区间,因此要生成0和1的随机整数,需设置high=2。
  2. 状态保存与恢复:

    • default_rng()返回的Generator对象依赖底层的BitGenerator,其状态存储在rng.bit_generator.state(一个字典)中。
    • 使用np.save()保存状态时需开启allow_pickle=True,因为状态是字典类型;加载时通过.item()取出字典,再赋值给rng.bit_generator.state完成恢复。
  3. 输出验证:
    运行上述代码会得到与原代码一致的输出逻辑:第三次生成的序列与第二次完全相同,说明状态恢复成功。

内容的提问来源于stack exchange,提问作者hridayns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:45:41