1e5
is a floating point number, but 10000 is an integer:
In [1]: import numpy as np
In [2]: np.array([1e5]).dtype
Out[2]: dtype('float64')
In [3]: np.array([10000]).dtype
Out[3]: dtype('int64')
But in numpy, integers have a fixed width (as opposed to python itself in which they are arbitrary length numbers), so they "roll over" when they get larger than the maximum allowed value.
(Note that in your case you are using a 32-bit build, so in fact the latter would give you dtype('int32')
, which has a maximum value 2**32-1=2,147,483,647, roughly 2e9, which is less than 1e10.)