python中random.seed()和random.getstate()用法详解
python的random包经常被用于模拟实验的重现,数据集的随机划分的确定性重现。然而,我本人之前对random.seed()什么时候调用,调用之后会对之后多少代码起决定性作用这一块感到云里雾里。今日得以有闲,作文以澄清之。
python中random.seed()和random.getstate()用法详解
摘要
python的random包经常被用于模拟实验的重现,数据集的随机划分的确定性重现。然而,我本人之前对random.seed()什么时候调用,调用之后会对之后多少代码起决定性作用这一块感到云里雾里。今日得以有闲,作文以澄清之。
正文
random.seed()是用来初始化随机数生成器的。确定生成器的初始状态。在调用random库中一些随机函数的过程中(例如random.shuffle()等),随机状态会发生改变。
这个时候,如果还想再次从相同的状态开始生成相同的随机结果,就需要重新设置相同的随机种子才可以。
例如
import random
if __name__ == '__main__':
# 初始化随机数生成器
random.seed(0)
# 获取初始状态
ini_state = random.getstate()
a = list(range(11))
# 生成一些随机数
random.shuffle(a)
print(a)
# 再生成一些随机数
b = list(range(11))
random.shuffle(b)
print(b)
运行结果是:
这表明两次生成的随机数是不同的。
要想生成相同的随机数,怎么办呢?
有两种办法
1 再次初始化随机数生成器
2 在初始化随机数生成器之后,调用random.getstate()方法以获取该对象的状态,保存该状态,并在再次生成随机数之前调用random.setstate()方法来恢复初始状态。这样就可以保证两次生成的随机数是相同的。
案例展示:
import random
if __name__ == '__main__':
# 初始化随机数生成器
random.seed(0)
# 获取初始状态
ini_state = random.getstate()
a = list(range(11))
# 生成一些随机数
random.shuffle(a)
print(a)
# 再生成一些随机数
b = list(range(11))
random.setstate(ini_state) # 恢复生成器状态
random.shuffle(b)
print(b)
妙哉。
其余的类似的随机种子可以同样考虑
参考文献

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)