Kramer84
Kramer84

Reputation: 47

Numpy random integer generator not covering full interval?

When generating random integers over (almost) the full interval allowed by int64, the generated integers seem to be generated on a smaller range. I'm using the following code:

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

Which is returning the following:

randomGenerationTest()
>>> (146746577, 9223372036832037133)

I agree that [1, 146746577] represents just a tiny fraction of the full range I'm trying to get, but in 1e11 random integers generated in the range of [1,2^63), I should have come just once near to my boundaries? Is this expected behavior when using too large intervals? Or is it cause as a human I can not grasp how enormous these intervals are and that I am already "near enough"?

By the way, this was just to know if the Seed can be randomly set from 1 to 1e63, as it is possible to set it manually to any of those values.

Upvotes: 0

Views: 207

Answers (2)

a_guest
a_guest

Reputation: 36289

The difference of your max. number 9223372036832037133 to the upper boundary of the interval 2**63 - 1 is 22738674. That's only about 2.46e-12 of the full range. The same holds for the min. value 146746577 which has a distance to the lower boundary of about 1.59e-11 relative to the full range of the interval. That means you covered more than 99.999999999% of the interval's range, i.e. pretty much everything.

Upvotes: 1

FHTMitchell
FHTMitchell

Reputation: 12157

You're generating 10^3 * 10^3 * 10^5 = 10^11 values. 2^63 / 10^11 ~= 10e+08. You're not even close to filling out the space of values. As a rough back of the hand calculation, if you're sampling 1/10^n elements of a uniform space, the min and max of the sample being ~n order of magnitude from the maximal and minimal element seems pretty reasonable.

Upvotes: 1

Related Questions