~malept/ubuntu/lucid/python2.6/dev-dependency-fix

« back to all changes in this revision

Viewing changes to Doc/library/random.rst

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2009-02-13 12:51:00 UTC
  • Revision ID: james.westby@ubuntu.com-20090213125100-uufgcb9yeqzujpqw
Tags: upstream-2.6.1
ImportĀ upstreamĀ versionĀ 2.6.1

Show diffs side-by-side

added added

removed removed

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