2016-11-10 130 views
0

我用来生成随机系统的人,并且因为它的功能,我想在Numpy中选择随机模块。但是当我想实现它时,我意识到Numpy不会真正生成一个psedu-random数字。随机在numpy中没有生成随机数

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

正如我所说,所有的细胞在n个具有零值:简单地说,下面的代码的结果每次都是0。即使当我在每次迭代之间添加暂停时,我仍然有相同的结果。

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

这不是我在随机模块中使用构建的情况。 由于这个问题可能真的影响到我的结果的完整性,所以我非常感谢任何关于如何解决这个问题的命令,或者为什么会发生这种情况。

PS:这是不是这样的,当我在空闲导入与NumPy和只是简单地打印

np.random.randint(0,1) 

连连。在这种情况下,结果看起来像随机。

回答

4

自变量numpy.random.randint(low, high)是一个独占范围,如range(low, high)。您希望numpy.random.randint(0, 2)具有生成0或1的相等机会。

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

1

randintab-1之间产生的数字,所以如果你想随机二进制数使用下列任一:

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

另外,还可以使用产生在同一时间数组:

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

不知道为什么IDLE生成的行为与我担心的文档不同。

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数学将它们变成所需的值。