Home | History | Annotate | Download | only in library
      1 :mod:`random` --- Generate pseudo-random numbers
      2 ================================================
      3 
      4 .. module:: random
      5    :synopsis: Generate pseudo-random numbers with various common distributions.
      6 
      7 **Source code:** :source:`Lib/random.py`
      8 
      9 --------------
     10 
     11 This module implements pseudo-random number generators for various
     12 distributions.
     13 
     14 For integers, uniform selection from a range. For sequences, uniform selection
     15 of a random element, a function to generate a random permutation of a list
     16 in-place, and a function for random sampling without replacement.
     17 
     18 On the real line, there are functions to compute uniform, normal (Gaussian),
     19 lognormal, negative exponential, gamma, and beta distributions. For generating
     20 distributions of angles, the von Mises distribution is available.
     21 
     22 Almost all module functions depend on the basic function :func:`.random`, which
     23 generates a random float uniformly in the semi-open range [0.0, 1.0).  Python
     24 uses the Mersenne Twister as the core generator.  It produces 53-bit precision
     25 floats and has a period of 2\*\*19937-1.  The underlying implementation in C is
     26 both fast and threadsafe.  The Mersenne Twister is one of the most extensively
     27 tested random number generators in existence.  However, being completely
     28 deterministic, it is not suitable for all purposes, and is completely unsuitable
     29 for cryptographic purposes.
     30 
     31 The functions supplied by this module are actually bound methods of a hidden
     32 instance of the :class:`random.Random` class.  You can instantiate your own
     33 instances of :class:`Random` to get generators that don't share state.  This is
     34 especially useful for multi-threaded programs, creating a different instance of
     35 :class:`Random` for each thread, and using the :meth:`jumpahead` method to make
     36 it likely that the generated sequences seen by each thread don't overlap.
     37 
     38 Class :class:`Random` can also be subclassed if you want to use a different
     39 basic generator of your own devising: in that case, override the :meth:`~Random.random`,
     40 :meth:`~Random.seed`, :meth:`~Random.getstate`, :meth:`~Random.setstate` and
     41 :meth:`~Random.jumpahead` methods.  Optionally, a new generator can supply a
     42 :meth:`~Random.getrandbits` method --- this
     43 allows :meth:`randrange` to produce selections over an arbitrarily large range.
     44 
     45 .. versionadded:: 2.4
     46    the :meth:`getrandbits` method.
     47 
     48 As an example of subclassing, the :mod:`random` module provides the
     49 :class:`WichmannHill` class that implements an alternative generator in pure
     50 Python.  The class provides a backward compatible way to reproduce results from
     51 earlier versions of Python, which used the Wichmann-Hill algorithm as the core
     52 generator.  Note that this Wichmann-Hill generator can no longer be recommended:
     53 its period is too short by contemporary standards, and the sequence generated is
     54 known to fail some stringent randomness tests.  See the references below for a
     55 recent variant that repairs these flaws.
     56 
     57 .. versionchanged:: 2.3
     58    MersenneTwister replaced Wichmann-Hill as the default generator.
     59 
     60 The :mod:`random` module also provides the :class:`SystemRandom` class which
     61 uses the system function :func:`os.urandom` to generate random numbers
     62 from sources provided by the operating system.
     63 
     64 .. warning::
     65 
     66    The pseudo-random generators of this module should not be used for
     67    security purposes.  Use :func:`os.urandom` or :class:`SystemRandom` if
     68    you require a cryptographically secure pseudo-random number generator.
     69 
     70 
     71 Bookkeeping functions:
     72 
     73 
     74 .. function:: seed([x])
     75 
     76    Initialize the basic random number generator. Optional argument *x* can be any
     77    :term:`hashable` object. If *x* is omitted or ``None``, current system time is used;
     78    current system time is also used to initialize the generator when the module is
     79    first imported.  If randomness sources are provided by the operating system,
     80    they are used instead of the system time (see the :func:`os.urandom` function
     81    for details on availability).
     82 
     83    If a :term:`hashable` object is given, deterministic results are only assured
     84    when :envvar:`PYTHONHASHSEED` is disabled.
     85 
     86    .. versionchanged:: 2.4
     87       formerly, operating system resources were not used.
     88 
     89 .. function:: getstate()
     90 
     91    Return an object capturing the current internal state of the generator.  This
     92    object can be passed to :func:`setstate` to restore the state.
     93 
     94    .. versionadded:: 2.1
     95 
     96    .. versionchanged:: 2.6
     97       State values produced in Python 2.6 cannot be loaded into earlier versions.
     98 
     99 
    100 .. function:: setstate(state)
    101 
    102    *state* should have been obtained from a previous call to :func:`getstate`, and
    103    :func:`setstate` restores the internal state of the generator to what it was at
    104    the time :func:`getstate` was called.
    105 
    106    .. versionadded:: 2.1
    107 
    108 
    109 .. function:: jumpahead(n)
    110 
    111    Change the internal state to one different from and likely far away from the
    112    current state.  *n* is a non-negative integer which is used to scramble the
    113    current state vector.  This is most useful in multi-threaded programs, in
    114    conjunction with multiple instances of the :class:`Random` class:
    115    :meth:`setstate` or :meth:`seed` can be used to force all instances into the
    116    same internal state, and then :meth:`jumpahead` can be used to force the
    117    instances' states far apart.
    118 
    119    .. versionadded:: 2.1
    120 
    121    .. versionchanged:: 2.3
    122       Instead of jumping to a specific state, *n* steps ahead, ``jumpahead(n)``
    123       jumps to another state likely to be separated by many steps.
    124 
    125 
    126 .. function:: getrandbits(k)
    127 
    128    Returns a python :class:`long` int with *k* random bits. This method is supplied
    129    with the MersenneTwister generator and some other generators may also provide it
    130    as an optional part of the API. When available, :meth:`getrandbits` enables
    131    :meth:`randrange` to handle arbitrarily large ranges.
    132 
    133    .. versionadded:: 2.4
    134 
    135 Functions for integers:
    136 
    137 
    138 .. function:: randrange(stop)
    139               randrange(start, stop[, step])
    140 
    141    Return a randomly selected element from ``range(start, stop, step)``.  This is
    142    equivalent to ``choice(range(start, stop, step))``, but doesn't actually build a
    143    range object.
    144 
    145    .. versionadded:: 1.5.2
    146 
    147 
    148 .. function:: randint(a, b)
    149 
    150    Return a random integer *N* such that ``a <= N <= b``.
    151 
    152 Functions for sequences:
    153 
    154 
    155 .. function:: choice(seq)
    156 
    157    Return a random element from the non-empty sequence *seq*. If *seq* is empty,
    158    raises :exc:`IndexError`.
    159 
    160 
    161 .. function:: shuffle(x[, random])
    162 
    163    Shuffle the sequence *x* in place. The optional argument *random* is a
    164    0-argument function returning a random float in [0.0, 1.0); by default, this is
    165    the function :func:`.random`.
    166 
    167    Note that for even rather small ``len(x)``, the total number of permutations of
    168    *x* is larger than the period of most random number generators; this implies
    169    that most permutations of a long sequence can never be generated.
    170 
    171 
    172 .. function:: sample(population, k)
    173 
    174    Return a *k* length list of unique elements chosen from the population sequence.
    175    Used for random sampling without replacement.
    176 
    177    .. versionadded:: 2.3
    178 
    179    Returns a new list containing elements from the population while leaving the
    180    original population unchanged.  The resulting list is in selection order so that
    181    all sub-slices will also be valid random samples.  This allows raffle winners
    182    (the sample) to be partitioned into grand prize and second place winners (the
    183    subslices).
    184 
    185    Members of the population need not be :term:`hashable` or unique.  If the population
    186    contains repeats, then each occurrence is a possible selection in the sample.
    187 
    188    To choose a sample from a range of integers, use an :func:`xrange` object as an
    189    argument.  This is especially fast and space efficient for sampling from a large
    190    population:  ``sample(xrange(10000000), 60)``.
    191 
    192 The following functions generate specific real-valued distributions. Function
    193 parameters are named after the corresponding variables in the distribution's
    194 equation, as used in common mathematical practice; most of these equations can
    195 be found in any statistics text.
    196 
    197 
    198 .. function:: random()
    199 
    200    Return the next random floating point number in the range [0.0, 1.0).
    201 
    202 
    203 .. function:: uniform(a, b)
    204 
    205    Return a random floating point number *N* such that ``a <= N <= b`` for
    206    ``a <= b`` and ``b <= N <= a`` for ``b < a``.
    207 
    208    The end-point value ``b`` may or may not be included in the range
    209    depending on floating-point rounding in the equation ``a + (b-a) * random()``.
    210 
    211 
    212 .. function:: triangular(low, high, mode)
    213 
    214    Return a random floating point number *N* such that ``low <= N <= high`` and
    215    with the specified *mode* between those bounds.  The *low* and *high* bounds
    216    default to zero and one.  The *mode* argument defaults to the midpoint
    217    between the bounds, giving a symmetric distribution.
    218 
    219    .. versionadded:: 2.6
    220 
    221 
    222 .. function:: betavariate(alpha, beta)
    223 
    224    Beta distribution.  Conditions on the parameters are ``alpha > 0`` and
    225    ``beta > 0``. Returned values range between 0 and 1.
    226 
    227 
    228 .. function:: expovariate(lambd)
    229 
    230    Exponential distribution.  *lambd* is 1.0 divided by the desired
    231    mean.  It should be nonzero.  (The parameter would be called
    232    "lambda", but that is a reserved word in Python.)  Returned values
    233    range from 0 to positive infinity if *lambd* is positive, and from
    234    negative infinity to 0 if *lambd* is negative.
    235 
    236 
    237 .. function:: gammavariate(alpha, beta)
    238 
    239    Gamma distribution.  (*Not* the gamma function!)  Conditions on the
    240    parameters are ``alpha > 0`` and ``beta > 0``.
    241 
    242    The probability distribution function is::
    243 
    244                  x ** (alpha - 1) * math.exp(-x / beta)
    245        pdf(x) =  --------------------------------------
    246                    math.gamma(alpha) * beta ** alpha
    247 
    248 
    249 .. function:: gauss(mu, sigma)
    250 
    251    Gaussian distribution.  *mu* is the mean, and *sigma* is the standard
    252    deviation.  This is slightly faster than the :func:`normalvariate` function
    253    defined below.
    254 
    255 
    256 .. function:: lognormvariate(mu, sigma)
    257 
    258    Log normal distribution.  If you take the natural logarithm of this
    259    distribution, you'll get a normal distribution with mean *mu* and standard
    260    deviation *sigma*.  *mu* can have any value, and *sigma* must be greater than
    261    zero.
    262 
    263 
    264 .. function:: normalvariate(mu, sigma)
    265 
    266    Normal distribution.  *mu* is the mean, and *sigma* is the standard deviation.
    267 
    268 
    269 .. function:: vonmisesvariate(mu, kappa)
    270 
    271    *mu* is the mean angle, expressed in radians between 0 and 2\*\ *pi*, and *kappa*
    272    is the concentration parameter, which must be greater than or equal to zero.  If
    273    *kappa* is equal to zero, this distribution reduces to a uniform random angle
    274    over the range 0 to 2\*\ *pi*.
    275 
    276 
    277 .. function:: paretovariate(alpha)
    278 
    279    Pareto distribution.  *alpha* is the shape parameter.
    280 
    281 
    282 .. function:: weibullvariate(alpha, beta)
    283 
    284    Weibull distribution.  *alpha* is the scale parameter and *beta* is the shape
    285    parameter.
    286 
    287 
    288 Alternative Generators:
    289 
    290 .. class:: WichmannHill([seed])
    291 
    292    Class that implements the Wichmann-Hill algorithm as the core generator. Has all
    293    of the same methods as :class:`Random` plus the :meth:`whseed` method described
    294    below.  Because this class is implemented in pure Python, it is not threadsafe
    295    and may require locks between calls.  The period of the generator is
    296    6,953,607,871,644 which is small enough to require care that two independent
    297    random sequences do not overlap.
    298 
    299 
    300 .. function:: whseed([x])
    301 
    302    This is obsolete, supplied for bit-level compatibility with versions of Python
    303    prior to 2.1. See :func:`seed` for details.  :func:`whseed` does not guarantee
    304    that distinct integer arguments yield distinct internal states, and can yield no
    305    more than about 2\*\*24 distinct internal states in all.
    306 
    307 
    308 .. class:: SystemRandom([seed])
    309 
    310    Class that uses the :func:`os.urandom` function for generating random numbers
    311    from sources provided by the operating system. Not available on all systems.
    312    Does not rely on software state and sequences are not reproducible. Accordingly,
    313    the :meth:`seed` and :meth:`jumpahead` methods have no effect and are ignored.
    314    The :meth:`getstate` and :meth:`setstate` methods raise
    315    :exc:`NotImplementedError` if called.
    316 
    317    .. versionadded:: 2.4
    318 
    319 Examples of basic usage::
    320 
    321    >>> random.random()        # Random float x, 0.0 <= x < 1.0
    322    0.37444887175646646
    323    >>> random.uniform(1, 10)  # Random float x, 1.0 <= x < 10.0
    324    1.1800146073117523
    325    >>> random.randint(1, 10)  # Integer from 1 to 10, endpoints included
    326    7
    327    >>> random.randrange(0, 101, 2)  # Even integer from 0 to 100
    328    26
    329    >>> random.choice('abcdefghij')  # Choose a random element
    330    'c'
    331 
    332    >>> items = [1, 2, 3, 4, 5, 6, 7]
    333    >>> random.shuffle(items)
    334    >>> items
    335    [7, 3, 2, 5, 6, 4, 1]
    336 
    337    >>> random.sample([1, 2, 3, 4, 5],  3)  # Choose 3 elements
    338    [4, 1, 5]
    339 
    340 
    341 
    342 .. seealso::
    343 
    344    M. Matsumoto and T. Nishimura, "Mersenne Twister: A 623-dimensionally
    345    equidistributed uniform pseudorandom number generator", ACM Transactions on
    346    Modeling and Computer Simulation Vol. 8, No. 1, January pp.3--30 1998.
    347 
    348    Wichmann, B. A. & Hill, I. D., "Algorithm AS 183: An efficient and portable
    349    pseudo-random number generator", Applied Statistics 31 (1982) 188-190.
    350 
    351    `Complementary-Multiply-with-Carry recipe
    352    <http://code.activestate.com/recipes/576707/>`_ for a compatible alternative
    353    random number generator with a long period and comparatively simple update
    354    operations.
    355