Warning
The Box-Muller method used to produce NumPy’s normals is no longer available in Generator
. It is not possible to reproduce the exact random values using Generator
for the normal distribution or any other distribution that relies on the normal such as the gamma
or standard_t
. If you require bitwise backward compatible streams, use RandomState
.
Quick comparison of legacy mtrand to the new Generator
Feature | Older Equivalent | Notes |
Generator | RandomState |
Generator requires a stream source, called a BitGenerator A number of these are provided. RandomState uses the Mersenne Twister MT19937 by default, but can also be instantiated with any BitGenerator. |
random |
random_sample , rand
|
Access the values in a BitGenerator, convert them to Many other distributions are also supported. |
integers |
randint , random_integers
| Use the endpoint kwarg to adjust the inclusion or exclution of the high interval endpoint |
And in more detail:
random_entropy
provides access to the system source of randomness that is used in cryptographic applications (e.g., /dev/urandom
on Unix).complex_normal
)standard_normal
, standard_exponential
or standard_gamma
.integers
is now the canonical way to generate integer random numbers from a discrete uniform distribution. The rand
and randn
methods are only available through the legacy RandomState
. This replaces both randint
and the deprecated random_integers
.ctypes
) and CFFI (cffi
). This allows these bit generators to be used in numba.In [1]: from numpy.random import Generator, PCG64 In [2]: import numpy.random In [3]: rg = Generator(PCG64()) In [4]: %timeit rg.standard_normal(100000) ...: %timeit numpy.random.standard_normal(100000) ...: 792 us +- 4.07 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 1.87 ms +- 20.3 us per loop (mean +- std. dev. of 7 runs, 1000 loops each)
In [5]: %timeit rg.standard_exponential(100000) ...: %timeit numpy.random.standard_exponential(100000) ...: 372 us +- 2.73 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 1.35 ms +- 7.16 us per loop (mean +- std. dev. of 7 runs, 1000 loops each)
In [6]: %timeit rg.standard_gamma(3.0, 100000) ...: %timeit numpy.random.standard_gamma(3.0, 100000) ...: 1.84 ms +- 6.24 us per loop (mean +- std. dev. of 7 runs, 1000 loops each) 3.92 ms +- 39.3 us per loop (mean +- std. dev. of 7 runs, 100 loops each)
dtype
argument that accepts np.float32
or np.float64
to produce either single or double prevision uniform random variables for select distributionsrandom
and integers
)standard_normal
)standard_gamma
)standard_exponential
)In [7]: rg = Generator(PCG64(0)) In [8]: rg.random(3, dtype='d') Out[8]: array([0.63696169, 0.26978671, 0.04097352]) In [9]: rg.random(3, dtype='f')
© 2005–2019 NumPy Developers
Licensed under the 3-clause BSD License.
https://docs.scipy.org/doc/numpy-1.17.0/reference/random/new-or-different.html