随机int64和float64数字

ast*_*rog 9 python random numpy

我正在尝试使用Numpy为整数和浮点数生成随机的64位整数值,在该类型的整个有效值范围内.要生成随机的32位浮点数,我可以使用:

In [2]: np.random.uniform(low=np.finfo(np.float32).min,high=np.finfo(np.float32).max,size=10)
Out[2]: 
array([  1.47351436e+37,   9.93620693e+37,   2.22893053e+38,
        -3.33828977e+38,   1.08247781e+37,  -8.37481260e+37,
         2.64176554e+38,  -2.72207226e+37,   2.54790459e+38,
        -2.47883866e+38])
Run Code Online (Sandbox Code Playgroud)

但如果我尝试将其用于64位数字,我会得到

In [3]: np.random.uniform(low=np.finfo(np.float64).min,high=np.finfo(np.float64).max,size=10)
Out[3]: array([ Inf,  Inf,  Inf,  Inf,  Inf,  Inf,  Inf,  Inf,  Inf,  Inf])
Run Code Online (Sandbox Code Playgroud)

类似地,对于整数,我可以成功生成随机32位整数:

In [4]: np.random.random_integers(np.iinfo(np.int32).min,high=np.iinfo(np.int32).max,size=10)
Out[4]: 
array([-1506183689,   662982379, -1616890435, -1519456789,  1489753527,
        -604311122,  2034533014,   449680073,  -444302414, -1924170329])
Run Code Online (Sandbox Code Playgroud)

但是64位整数不成功:

In [5]: np.random.random_integers(np.iinfo(np.int64).min,high=np.iinfo(np.int64).max,size=10)
---------------------------------------------------------------------------
OverflowError                             Traceback (most recent call last)

/Users/tom/tmp/<ipython console> in <module>()

/Library/Python/2.6/site-packages/numpy/random/mtrand.so in mtrand.RandomState.random_integers (numpy/random/mtrand/mtrand.c:6640)()

/Library/Python/2.6/site-packages/numpy/random/mtrand.so in mtrand.RandomState.randint (numpy/random/mtrand/mtrand.c:5813)()

OverflowError: long int too large to convert to int
Run Code Online (Sandbox Code Playgroud)

这是预期的行为,还是我应该将这些报告为Numpy中的错误?

rjm*_*nro 7

对于整数,您可以生成2个32位随机数并组合它们:

a + (b << 32)
Run Code Online (Sandbox Code Playgroud)


Sov*_*iut 0

问题似乎是该random_numbers方法只需要 32 位整数。

根据票号#555,从 1.1.0 版本开始,随机种子现在可以是 64 位,我建议从此处下载并安装最新版本的 NumPy 。