为何使用相同种子时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
相关产品推荐
相关产品推荐

