如何为numpy数组设置随机状态以获得固定随机生成结果
各方案失效原因
- 你使用
random.seed()设置的是Python标准库random模块的随机种子,和Numpy的随机数生成体系完全独立,因此对np.random.normal不会产生任何作用,这是第二种方案无效的核心原因。 - 第一种
np.random.RandomState的写法本身逻辑正确,如果未生效,大概率是实际代码中混用了实例方法R.normal和全局方法np.random.normal,或是重复调用生成方法前没有重新初始化带固定种子的RandomState实例,导致种子未重置。 - 全局
np.random.seed()设置方案在Numpy 1.17及以上版本中已被官方标记为旧接口,若代码中存在其他修改全局随机状态的逻辑,很容易导致种子失效。
正确设置方案
方案1:兼容所有Numpy版本的RandomState写法
确保每次生成随机数前,都重新初始化带固定种子的RandomState实例,所有随机数都通过该实例生成,不要混用全局随机接口:
import numpy as np mu, sigma = 0, 0.1 # 每次运行都初始化一次固定种子的实例,保证生成结果一致 R = np.random.RandomState(1989) noise = R.normal(mu, sigma, [2, 2])
方案2:Numpy 1.17+官方推荐的新接口写法
新的随机数生成器性能和统计特性更优,固定seed后可稳定复现结果:
import numpy as np mu, sigma = 0, 0.1 rng = np.random.default_rng(seed=1989) noise = rng.normal(mu, sigma, [2, 2])
内容的提问来源于stack exchange,提问作者Sticky
相关产品推荐
相关产品推荐

