Numpy随机整数生成器未涵盖整个间隔?

时间:2020-04-30 10:22:05

标签: python numpy random

在(几乎)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)

我同意[1,146746577]只是我要获取的全部范围的一小部分,但是在1e11范围为[1,2 ^ 63)的随机整数中,我应该只是一旦接近我的边界? 使用太大的间隔时,这是预期的行为吗? 还是作为一个人,我无法理解这些间隔有多大,而我已经“足够近”了?

顺便说一句,这只是想知道是否可以将Seed随机设置为1到1e63,因为可以将其手动设置为任何这些值。

2 个答案:

答案 0 :(得分:1)

您正在生成10 ^ 3 * 10 ^ 3 * 10 ^ 5 = 10 ^ 11的值。 2 ^ 63/10 ^ 11〜= 10e + 08。您甚至没有接近填充值的空间。粗略计算一下,如果您要对一个均匀空间的1/10 ^ n个元素进行采样,那么从最大和最小元素开始,样本的最小和最大值约为n个数量级,这似乎是很合理的。

答案 1 :(得分:1)

最大差到间隔9223372036832037133的上边界的数字2**63 - 122738674。这仅占整个范围的2.46e-12。分钟也是如此。值146746577,相对于整个间隔范围,它与下边界的距离约为1.59e-11。这意味着您覆盖了该间隔范围的99.999999999%以上,即几乎所有内容。