【问题标题】:Python's random: What happens if I don't use seed(someValue)?Python的随机:如果我不使用seed(someValue)会发生什么?
【发布时间】:2010-10-23 11:51:43
【问题描述】:

a)在这种情况下,随机数生成器是否在每次运行时都使用系统时钟(改变种子)?

b) 种子是否用于生成 expovariate(lambda) 的伪随机值?

【问题讨论】:

    标签: python random seed


    【解决方案1】:

    “使用源头,卢克!”...;-)。学习https://svn.python.org/projects/python/trunk/Lib/random.py 会让你很快放心;-)。

    没有设置种子时会发生什么(即“i is None”的情况):

    if a is None:
        try:
            a = long(_hexlify(_urandom(16)), 16)
        except NotImplementedError:
            import time
            a = long(time.time() * 256) # use fractional seconds
    

    和expovariate:

    random = self.random
    u = random()
    while u <= 1e-7:
        u = random()
    return -_log(u)/lambd
    

    显然与其他所有方法都使用相同的底层随机生成器,因此同样受到播种或缺乏播种的影响(真的,否则它会怎么做?-)

    【讨论】:

      【解决方案2】:

      a) 它通常使用系统时钟,某些系统上的时钟可能只有 ms 精度,因此种子两次非常快可能会产生相同的值。

      种子(自我,a=无) 从可散列对象初始化内部状态。

      None or no argument seeds from current time or from an operating
      system specific randomness source if available.
      

      http://pydoc.org/2.5.1/random.html#Random-seed

      b) 我想 expovariate 可以,但我找不到任何证据。不然就傻了。

      【讨论】:

        【解决方案3】:

        使用当前系统时间;当前系统时间也用于在模块首次导入时初始化生成器。如果操作系统提供随机源,则使用它们而不是系统时间(有关可用性的详细信息,请参见 os.urandom() 函数)。

        Random Docs

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-17
          • 2011-04-02
          • 1970-01-01
          • 2022-07-31
          • 2012-01-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多