You are viewing an older version (2.4.3). Go to latest (2.4.4)
{ } Raw JSON

bundles / numpy 2.4.3 / docs

Doc

reference:random:new-or-different

docs/reference:random:new-or-different

What's new or different

NumPy 1.17.0 introduced Generator as an improved replacement for the legacy RandomState. Here is a quick comparison of the two implementations.

======================= ================== =============
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.
----------------------- ------------------ -------------

~.Generator.random random_sample, Access the values in a

rand BitGenerator, convert them to

float64 in the interval [0.0., 1.0). In addition to the size kwarg, now supports dtype='d' or dtype='f', and an out kwarg to fill a user-supplied array.

Many other distributions are also supported.

----------------------- ------------------ ------------- ~.Generator.integers randint, Use the endpoint kwarg to

random_integers adjust the inclusion or exclusion

of the high interval endpoint.

======================= ================== ============= * The normal, exponential and gamma generators use 256-step Ziggurat

methods which are 2-10 times faster than NumPy's default implementation in ~.Generator.standard_normal, ~.Generator.standard_exponential or ~.Generator.standard_gamma. Because of the change in algorithms, it is not possible to reproduce the exact random values using Generator for these distributions or any distribution method that relies on them.

  • ~.Generator.integers is now the canonical way to generate integer random numbers from a discrete uniform distribution. This replaces both randint and the deprecated random_integers.

  • The rand and randn methods are only available through the legacy ~.RandomState.

  • Generator.random is now the canonical way to generate floating-point random numbers, which replaces RandomState.random_sample, sample, and ranf, all of which were aliases. This is consistent with Python's random.random.

  • All bit generators can produce doubles, uint64s and uint32s via CTypes (~PCG64.ctypes) and CFFI (~PCG64.cffi). This allows these bit generators to be used in numba.

  • The bit generators can be used in downstream projects via Cython.

  • All bit generators use SeedSequence to convert seed integers to initialized states.

  • Optional dtype argument that accepts np.float32 or np.float64 to produce either single or double precision uniform random variables for select distributions. ~.Generator.integers accepts a dtype argument with any signed or unsigned integer dtype.

    • Uniforms (~.Generator.random and ~.Generator.integers)

    • Normals (~.Generator.standard_normal)

    • Standard Gammas (~.Generator.standard_gamma)

    • Standard Exponentials (~.Generator.standard_exponential)

  • Optional out argument that allows existing arrays to be filled for select distributions

    • Uniforms (~.Generator.random)

    • Normals (~.Generator.standard_normal)

    • Standard Gammas (~.Generator.standard_gamma)

    • Standard Exponentials (~.Generator.standard_exponential)

    This allows multithreading to fill large arrays in chunks using suitable BitGenerators in parallel.

  • Optional axis argument for methods like ~.Generator.choice, ~.Generator.permutation and ~.Generator.shuffle that controls which axis an operation is performed over for multi-dimensional arrays.

  • Added a method to sample from the complex normal distribution (~.Generator.complex_normal)