我用来生成随机系统的人,由于它的功能,我想在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)
一次又一次。在这种情况下,结果看起来像是随机的。
答案 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
以简化过渡从RandomArray
到Numeric
。
答案 1 :(得分:1)
randint
生成a
和b-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数学将它们变为所需的值。