zoukankan      html  css  js  c++  java
  • random.seed()函数理解

    random模块使用Mersenne Twister算法来计算生成随机数。这是一个确定性算法,但是可以通过random.seed()函数修改初始化种子[1]。比如:

    random.seed() # Seed based on system time or os.urandom()
    random.seed(12345) # Seed based on integer given
    random.seed(b'bytedata') # Seed based on byte data
    

    对于random.seed(n),如果使用相同的n值,则随机数生成函数每次生成的随机数序列都相同;如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数序列因时间差异而不同。

    例1

    import random
    random.seed(9)
    for i in range(3):
        print(random.random())

    运行结果如下:

    0.46300735781502145
    0.37331193139504204
    0.13853941251445523

    本例中,每次循环时random.random()都采用9作为初始化的种子,生成相同的随机数序列。在循环中,第一次调用random.random()将返回该随机数序列的第一个元素,第二次调用random.random()将返回该随机数序列的第二个元素,以此类推。

    再次运行示例代码的结果如下:

    0.46300735781502145
    0.37331193139504204
    0.13853941251445523

    多次运行这个示例代码,所得结果都是一样的,因为在本例中,使用的seed()值都是9,所以random.random()每次生成的随机数序列都相同。

    例2

    import random
    for i in range(3):
        random.seed(9)
        print(random.random())
    

    运行上述程序的结果如下:

    0.46300735781502145
    0.46300735781502145
    0.46300735781502145

    在本例中,使用的seed()值都是9,所以random.random()每次生成的随机数序列都相同,但是random.seed(9)在循环内部,print(random.random())这行命令每一次输出时都定位到所生成的随机数列表的第一个元素。

    参考资料:

    [1]. 3.11 随机选择

    [2]. random.seed()的使用

  • 相关阅读:
    POJ3041Asteroids(最小点覆盖+有点小抽象)
    POJ 2240Arbitrage(Floyd)
    POJ1860Currency Exchange(Bellman + 正权回路)
    POJ3259Wormholes(判断是否存在负回路)
    TCL V7300A-3D升级教程
    “一生所爱“一首一听就很想落泪的歌曲
    一生所爱 怀念那段旧时光~
    文艺小青年
    又是一年中秋节
    luogu1080 国王游戏(贪心+高精度)
  • 原文地址:https://www.cnblogs.com/picassooo/p/12516546.html
Copyright © 2011-2022 走看看