Source code for hyperlearn.random
from numpy.random import uniform as _uniform
from numpy import tile, float32, zeros, newaxis
from numba import njit
[docs]def uniform(left, right, n, p = None, dtype = float32):
"""
[Added 6/11/2018]
Produces pseudo-random uniform numbers between left and right range.
Notice much more memory efficient than Numpy, as provides
a DTYPE argument (float32 supported).
"""
l, r = left/2, right/2
dtype = zeros(1, dtype = dtype)
if p == None:
# Only 1 long vector --> easily made.
return uniform_vector(left, right, n, dtype)
part = uniform_vector(l, r, p, dtype)
X = tile(part, (n, 1))
add = uniform_vector(l, r, n, dtype)[:, newaxis]
mult = uniform_vector(0, 1, n, dtype)[:, newaxis]
return (X + add) * mult
[docs]@njit(fastmath = True, nogil = True, cache = True)
def uniform_vector(l, r, size, dtype):
zero = zeros(size, dtype = dtype.dtype)
for j in range(size):
zero[j] = _uniform(l, r)
return zero