I want to make random array of int64
uniformly distributed in some range that is not within int32
limits.
There is randint
and random_integers
but they work with int32
; supplying big upper limit produces high is out of bounds for int32
.
How do I generate random int64
array with specified range?
Possible solutions:
int64
array and then normalize via lower + x % (upper - lower)
. But do int32
generation has same normalization? Doesn't it affect uniformity?Didn't I miss some more concise and convenient ways?
Why do random methods only produce float
s and int32
?
Using dtype on windows with numpy > 1.11.0:
As @John Y suggestion, it seems possible to cast integers to the desired format using dtype
as a named parameter with np.random.randint
:
a = np.random.randint(2147483647, 9223372036854775807, size=3, dtype=np.int64)
[end edit]
You can generate an array directly by setting the range for randint; it is likely more efficient than a piecemeal generation and aggregation of an array:
Docstring: (numpy randint)
randint(low, high=None, size=None)
size range if int 32:
ii32 = np.iinfo(np.int32)
iinfo(min=-2147483648, max=2147483647, dtype=int32)
size range for int64 <-> c long
ii64 = np.iinfo(np.int64)
iinfo(min=-9223372036854775808, max=9223372036854775807, dtype=int64)
Generate an array of int64 of val > int32.max:
a = np.random.randint(2147483647, 9223372036854775807, size = 3)
array([4841796342900989982, 43877033468085758, 205656391264979944])
checking the type of the data: gives int64
as expected
a.dtype
dtype('int64')
numpy.randint gives you a uniform distribution across the specified range (attention, the range is exclusive of both ends, unlike python randint)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With