Movatterモバイル変換
[0]ホーム
This module implements pseudo-random number generators for variousdistributions.
For integers, uniform selection from a range.For sequences, uniform selection of a random element, a function togenerate a random permutation of a list in-place, and a function forrandom sampling without replacement.
On the real line, there are functions to compute uniform, normal (Gaussian),lognormal, negative exponential, gamma, and beta distributions.For generating distributions of angles, the von Mises distributionis available.
Almost all module functions depend on the basic functionrandom(), which generates a random float uniformly inthe semi-open range [0.0, 1.0). Python uses the Mersenne Twister asthe core generator. It produces 53-bit precision floats and has aperiod of 2**19937-1. The underlying implementation in Cis both fast and threadsafe. The Mersenne Twister is one of the mostextensively tested random number generators in existence. However, beingcompletely deterministic, it is not suitable for all purposes, and iscompletely unsuitable for cryptographic purposes.
The functions supplied by this module are actually bound methods of ahidden instance of therandom.Random class. You caninstantiate your own instances ofRandom to get generatorsthat don't share state. This is especially useful for multi-threadedprograms, creating a different instance ofRandom for eachthread, and using thejumpahead() method to make it likely that thegenerated sequences seen by each thread don't overlap.
ClassRandom can also be subclassed if you want to use adifferent basic generator of your own devising: in that case, overridetherandom(),seed(),getstate(),setstate() andjumpahead() methods.Optionally, a new generator can supply agetrandombits()method -- this allowsrandrange() to produce selectionsover an arbitrarily large range.New in version 2.4:thegetrandombits() method.
As an example of subclassing, therandom module providestheWichmannHill class that implements an alternative generatorin pure Python. The class provides a backward compatible way toreproduce results from earlier versions of Python, which used theWichmann-Hill algorithm as the core generator. Note that this Wichmann-Hillgenerator can no longer be recommended: its period is too short bycontemporary standards, and the sequence generated is known to fail somestringent randomness tests. See the references below for a recentvariant that repairs these flaws.Changed in version 2.3:Substituted MersenneTwister for Wichmann-Hill.
Bookkeeping functions:
- Initialize the basic random number generator. Optional argumentx can be any hashable object. Ifx is omitted or
None, current system time is used; current system time is also used to initialize the generator when the module is first imported. If randomness sources are provided by the operating system, they are used instead of the system time (see theos.urandom() function for details on availability).Changed in version 2.4:formerly, operating system resources were not used. Ifx is notNone or an int or long,hash(x) is used instead. Ifx is an int or long,x is used directly.
- Return an object capturing the current internal state of the generator. This object can be passed tosetstate() to restore the state.New in version 2.1.
- state should have been obtained from a previous call togetstate(), andsetstate() restores the internal state of the generator to what it was at the timesetstate() was called.New in version 2.1.
- Change the internal state to one different from and likely far away from the current state.n is a non-negative integer which is used to scramble the current state vector. This is most useful in multi-threaded programs, in conjuction with multiple instances of theRandom class:setstate() orseed() can be used to force all instances into the same internal state, and thenjumpahead() can be used to force the instances' states far apart.New in version 2.1.Changed in version 2.3:Instead of jumping to a specific state,n steps ahead,jumpahead(n) jumps to another state likely to be separated by many steps.
- Returns a pythonlong int withk random bits. This method is supplied with the MersenneTwister generator and some other generators may also provide it as an optional part of the API. When available,getrandbits() enablesrandrange() to handle arbitrarily large ranges.New in version 2.4.
Functions for integers:
| randrange( | [start,] stop[, step]) |
- Return a randomly selected element from
range(start,stop,step). This is equivalent tochoice(range(start,stop,step)), but doesn't actually build a range object.New in version 1.5.2.
- Return a random integerN such that
a <=N <=b.
Functions for sequences:
- Return a random element from the non-empty sequenceseq. Ifseq is empty, raisesIndexError.
- Shuffle the sequencex in place. The optional argumentrandom is a 0-argument function returning a random float in [0.0, 1.0); by default, this is the functionrandom().
Note that for even rather smalllen(x), the total number of permutations ofx is larger than the period of most random number generators; this implies that most permutations of a long sequence can never be generated.
- Return ak length list of unique elements chosen from the population sequence. Used for random sampling without replacement.New in version 2.3.
Returns a new list containing elements from the population while leaving the original population unchanged. The resulting list is in selection order so that all sub-slices will also be valid random samples. This allows raffle winners (the sample) to be partitioned into grand prize and second place winners (the subslices).
Members of the population need not be hashable or unique. If the population contains repeats, then each occurrence is a possible selection in the sample.
To choose a sample from a range of integers, use anxrange() object as an argument. This is especially fast and space efficient for sampling from a large population:sample(xrange(10000000), 60).
The following functions generate specific real-valued distributions.Function parameters are named after the corresponding variables in thedistribution's equation, as used in common mathematical practice; most ofthese equations can be found in any statistics text.
- Return the next random floating point number in the range [0.0, 1.0).
- Return a random real numberN such that
a <=N <b.
- Beta distribution. Conditions on the parameters are
alpha > 0 andbeta > 0. Returned values range between 0 and 1.
- Exponential distribution.lambd is 1.0 divided by the desired mean. (The parameter would be called ``lambda'', but that is a reserved word in Python.) Returned values range from 0 to positive infinity.
| gammavariate( | alpha, beta) |
- Gamma distribution. (Not the gamma function!) Conditions on the parameters are
alpha > 0 andbeta > 0.
- Gaussian distribution.mu is the mean, andsigma is the standard deviation. This is slightly faster than thenormalvariate() function defined below.
| lognormvariate( | mu, sigma) |
- Log normal distribution. If you take the natural logarithm of this distribution, you'll get a normal distribution with meanmu and standard deviationsigma.mu can have any value, andsigma must be greater than zero.
- Normal distribution.mu is the mean, andsigma is the standard deviation.
| vonmisesvariate( | mu, kappa) |
- mu is the mean angle, expressed in radians between 0 and 2*pi, andkappa is the concentration parameter, which must be greater than or equal to zero. Ifkappa is equal to zero, this distribution reduces to a uniform random angle over the range 0 to 2*pi.
- Pareto distribution.alpha is the shape parameter.
| weibullvariate( | alpha, beta) |
- Weibull distribution.alpha is the scale parameter andbeta is the shape parameter.
Alternative Generators:
| class WichmannHill( | [seed]) |
- Class that implements the Wichmann-Hill algorithm as the core generator.Has all of the same methods asRandom plus thewhseed()method described below. Because this class is implemented in purePython, it is not threadsafe and may require locks between calls. Theperiod of the generator is 6,953,607,871,644 which is small enough torequire care that two independent random sequences do not overlap.
- This is obsolete, supplied for bit-level compatibility with versions of Python prior to 2.1. Seeseed() for details.whseed() does not guarantee that distinct integer arguments yield distinct internal states, and can yield no more than about 2**24 distinct internal states in all.
| class SystemRandom( | [seed]) |
- Class that uses theos.urandom() function for generatingrandom numbers from sources provided by the operating system.Not available on all systems.Does not rely on software state and sequences are not reproducible.Accordingly, theseed() andjumpahead() methodshave no effect and are ignored. Thegetstate() andsetstate() methods raiseNotImplementedError ifcalled.New in version 2.4.
Examples of basic usage:
>>> random.random() # Random float x, 0.0 <= x < 1.00.37444887175646646>>> random.uniform(1, 10) # Random float x, 1.0 <= x < 10.01.1800146073117523>>> random.randint(1, 10) # Integer from 1 to 10, endpoints included7>>> random.randrange(0, 101, 2) # Even integer from 0 to 10026>>> random.choice('abcdefghij') # Choose a random element'c'>>> items = [1, 2, 3, 4, 5, 6, 7]>>> random.shuffle(items)>>> items[7, 3, 2, 5, 6, 4, 1]>>> random.sample([1, 2, 3, 4, 5], 3) # Choose 3 elements[4, 1, 5]See Also:
M. Matsumoto and T. Nishimura, ``Mersenne Twister: A 623-dimensionally equidistributed uniform pseudorandom number generator'',ACM Transactions on Modeling and Computer Simulation Vol. 8, No. 1, January pp.3-30 1998.
Wichmann, B. A. & Hill, I. D., ``Algorithm AS 183: An efficient and portable pseudo-random number generator'',Applied Statistics 31 (1982) 188-190.
- http://www.npl.co.uk/ssfm/download/abstracts.html#196
- A modern variation of the Wichmann-Hill generator that greatly increases the period, and passes now-standard statistical tests that the original generator failed.
Release 2.5.2, documentation updated on 21st February, 2008. SeeAbout this document... for information on suggesting changes.
[8]ページ先頭