我想使int64的随机数组在不属于int32限制的范围内均匀分布。
有randint和random_integers,但他们与int32合作;提供较大的上限生产high is out of bounds for int32。
如何生成具有指定范围的随机int64数组?
可能的解决办法:
int64数组,然后通过lower + x % (upper - lower)进行规范化。但是int32一代也有同样的归一化吗?它不影响均匀性吗?我不是错过了一些更简洁和方便的方法吗?
为什么随机方法只产生float和int32
发布于 2016-04-22 15:42:55
编辑:
在numpy > 1.11.0:的窗口上使用dtype
正如@John Y建议的那样,使用dtype作为带有np.random.randint的命名参数似乎可以将整数转换成所需的格式。
a = np.random.randint(2147483647, 9223372036854775807, size=3, dtype=np.int64)端编辑
您可以通过为randint设置范围来直接生成数组;它可能比数组的零碎生成和聚合更有效:
Docstring:
randint(low, high=None, size=None)大小范围如果int 32:
ii32 = np.iinfo(np.int32)
iinfo(min=-2147483648, max=2147483647, dtype=int32)int64 <-> c长的大小范围
ii64 = np.iinfo(np.int64)
iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)生成一个val > int32.max:的int64数组
a = np.random.randint(2147483647, 9223372036854775807, size = 3)
array([4841796342900989982, 43877033468085758, 205656391264979944])检查数据类型:按预期提供int64
a.dtype
dtype('int64')numpy.randint为您提供了一个在指定范围内的统一分布(注意,该范围不包括两端,不像numpy.randint)
发布于 2016-04-22 15:16:00
您可以使用random.randint并转换返回值:
>>> import numpy as np
>>> import random
>>> np.int64(random.randint(10000, 1000000000000))
321601597066我不能保证这是最快的方法,但至少它有效而且非常清晰.(为了得到一个数组,只需做很多次)。
https://stackoverflow.com/questions/36797420
复制相似问题