【问题标题】:random in numpy is not generating random numbernumpy中的随机数不会生成随机数
【发布时间】:2016-11-10 01:10:07
【问题描述】:

我用来生成随机系统的人,由于它的功能,我想在 Numpy 中选择随机模块。但是当我想实现它时,我意识到 Numpy 不会真正生成伪随机数。简而言之,以下代码的结果每次都是0:

    import numpy as np
    for i in range(10000):
         n[i] = np.random.randint(0,1)

正如我所提到的,n 中的所有单元格的值都为零。即使我在每次迭代之间添加暂停,我仍然有相同的结果。

    import time  
    import numpy as np
    for i in range(10000):
         n[i] = np.random.randint(0,1)
         time.sleep(2)

当我使用内置随机模块时,情况并非如此。 由于这个问题真的会影响我的结果的完整性,我非常感谢任何关于如何克服这个问题或为什么会发生这种情况的命令。

PS:当我在 IDLE 中导入 Numpy 并简单地打印时,情况并非如此

  np.random.randint(0,1)

一次又一次。在这种情况下,结果看起来很随机。

【问题讨论】:

    标签: python numpy random


    【解决方案1】:

    numpy.random.randint(low, high)high 参数是一个独占范围,例如 range(low, high)。您希望numpy.random.randint(0, 2) 有相同的机会生成 0 或 1。

    这与标准库的random.randint() 不同,后者使用包含范围。包含范围被广泛认为是设计错误。这两个函数的命名大多是巧合; numpy.random.randint() 源自 NumericRandomArray 模块,该模块早于标准 random 模块,旨在向后兼容 RandomArray,以简化从 Numericnumpy 的转换。

    【讨论】:

      【解决方案2】:

      randint 生成介于 ab-1 之间的数字,因此如果您想要随机二进制数,请使用以下任一方法:

      np.random.randint(0,2)
      np.random.randint(2)
      

      另外,您可以使用以下方法同时生成数组:

      n = np.random.randint(2, size=10000)
      

      不确定为什么 IDLE 会产生与文档不同的行为。

      【讨论】:

        【解决方案3】:

        "randint" 只生成指定范围内的整数,在您的代码中只能使用数字 1。 而不是使用:

        randint(0,1) 
        

        在逗号后面使用值较高的东西,例如:

        randint(0,2)
        

        创建一个 1 或 2 的随机数。

        另外,如果您使用内置的随机函数,您可以生成介于 0.0 和 1.0 之间的随机浮点值:

        import random
        randnum = random.random()
        print(randnum)
        

        这给出的输出让人联想到诸如“0.1798164301328583”之类的值,您可以使用简单的 python 数学将它们变成所需的值。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-10-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多