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

为何使用相同种子时Numpy两种随机数生成器输出不同?

为什么Numpy同种子的两种随机数生成器输出不同?

这是因为你用到的是Numpy里两种完全独立的随机数生成器实现,核心差异在于:

  • np.random.randint 属于Numpy旧版的全局随机数系统,底层采用Mersenne Twister(MT19937)算法,np.random.seed(40) 是给这个全局的MT19937实例设置种子。
  • np.random.default_rng(seed=40) 创建的是Numpy 1.17+推出的新版Generator对象,默认使用PCG64算法——这是一种更现代、统计特性更优的随机数生成算法。

随机数的生成完全依赖算法的初始化逻辑和内部状态,哪怕种子数值相同,不同算法的初始化过程、后续生成的随机序列也完全没有关联,所以调用对应的整数生成方法时,输出结果自然不一样。

你可以进一步验证两者的序列差异:

# 旧版全局生成器的序列
import numpy as np
np.random.seed(40)
print(np.random.randint(-3, 4))  # 输出3
print(np.random.randint(-3, 4))  # 输出-1

# 新版Generator的序列
rng = np.random.default_rng(seed=40)
print(rng.integers(-3, 4))       # 输出0
print(rng.integers(-3, 4))       # 输出1

Numpy官方推荐在新代码中优先使用default_rng创建的Generator对象,不仅随机性更可靠,还能避免全局随机状态带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 09:34:58