Python Numpy随机整数生成器不覆盖整个间隔?

Python Numpy随机整数生成器不覆盖整个间隔?,python,numpy,random,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,100

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


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

您正在生成10^3*10^3*10^5=10^11值。2^63/10^11~=10e+08。您甚至还没有接近填充值的空间。作为粗略的手工计算,如果您正在采样1/均匀空间中的10^n个元素,样本的最小值和最大值与最大值和最小值相差~n个数量级似乎很合理。

您正在生成10^3*10^3*10^5=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.99999999%的区间范围,也就是说几乎所有的东西。

你的最大麻木差异er
9223372036832037133
到区间的上边界
2**63-1
22738674
。这仅是整个范围的
2.46e-12
。最小值
146746577
与区间的下边界的距离约为
1.59e-11
间期。这意味着你覆盖了区间范围的99.99999999%以上,即几乎所有的东西。

谢谢!所以它确实已经足够接近边界,只是与我们使用的通常尺度相比,146746577似乎仍然非常接近。谢谢!所以它确实已经足够接近边界,只是t与我们正在使用的普通天平相比,146746577似乎仍然非常稳定。
randomGenerationTest()
>>> (146746577, 9223372036832037133)