Numpy随机整数生成器不覆盖整个区间



当在(几乎(int64允许的整个区间上生成随机整数时,生成的整数似乎是在较小的范围内生成的。我使用以下代码:

import numpy
def randGenerationTest(n_gens=100000):
min_int = 2**63
max_int = 0
for _ in range(n_gens) :
randMatrix = numpy.random.randint(low=1, high = 2**63, size=(1000,1000))
a = randMatrix.min()
b = randMatrix.max()
if a < min_int:
min_int = a
if b > max_int :
max_int = b
return min_int, max_int

返回以下内容:

randomGenerationTest()
>>> (146746577, 9223372036832037133)

我同意[1146746577]只代表我试图得到的整个范围的一小部分,但在[1,2^63(范围内生成的1e11随机整数中,我应该只接近我的边界一次?当使用过大的间隔时,这是预期的行为吗?还是因为作为一个人,我无法理解这些间隔有多大,而且我已经"足够接近"了?

顺便说一句,这只是为了知道种子是否可以从1到1e63随机设置,因为可以手动将其设置为这些值中的任何一个

您生成的值为10^3*10^3*10^2=10^11。2^63/10^11~=10e+08。你甚至还没有填满价值观的空间。作为粗略的计算,如果你对一个均匀空间的1/10^n个元素进行采样,那么样本的最小值和最大值与最大值和最小值之间的n个数量级似乎是非常合理的。

最大数9223372036832037133与区间2**63 - 1的上边界之差为22738674。这只是全量程的2.46e-12。对于最小值146746577也是如此,该最小值到下边界的距离相对于区间的整个范围大约为1.59e-11。这意味着你覆盖了超过99.99999999999%的区间,即几乎所有的内容。

最新更新