numpy中的随机数不会产生随机数

时间:2016-11-10 01:10:07

标签: python numpy random

我用来生成随机系统的人,由于它的功能,我想在Numpy中选择随机模块。但是当我想实现它时,我意识到Numpy不会真正生成一个psedu随机数。简而言之,以下代码的结果每次都是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)

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

3 个答案:

答案 0 :(得分:5)

high的{​​{1}}参数是一个排他范围,如numpy.random.randint(low, high)。您希望range(low, high)有相同的机会生成0或1。

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

答案 1 :(得分:1)

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

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

此外,您可以使用以下方法同时生成阵列:

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

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

答案 2 :(得分:0)

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

randint(0,1) 

在逗号后使用值较高的内容,例如:

randint(0,2)

创建1或2的随机数。

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

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

这使得输出让人联想到诸如" 0.1798164301328583"之类的值,并且您可以使用简单的python数学将它们变为所需的值。