python中random.seed()和random.getstate()用法详解

2023-12-20 05:38:45

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)

在这里插入图片描述

妙哉。
其余的类似的随机种子可以同样考虑

参考文献

[1] 详解Python random.getstate(获取当前随机数生成器的内部状态)函数的使用方法

文章来源:https://blog.csdn.net/ChenglinBen/article/details/135091775
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。