Python标准库3.4.3-random
9.6. random — Generate pseudo-random numbers
Source code: Lib/random.py 翻译:Z.F.
This module implements pseudo-random number generators for various distributions.
此模块实现伪随机数生成和各种分布
For integers, there is uniform selection from a range. For sequences, there is uniform selection of a random element, a function to generate a random permutation of a list in-place, and a function for random 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 distribution is available.
实际上,是一些计算统一分布,正态(高斯)分布,对数正态分布,复指数分布,伽马分布,和贝塔分布。生成角度分布和冯·米塞斯分布时可用的。
Almost all module functions depend on the basic function random(), which generates a random float uniformly in the semi-open range [0.0, 1.0). Python uses the Mersenne Twister as the core generator. It produces 53-bit precision floats and has a period of 2**19937-1. The underlying implementation in C is both fast and threadsafe. The Mersenne Twister is one of the most extensively tested random number generators in existence. However, being completely deterministic, it is not suitable for all purposes, and is completely unsuitable for cryptographic purposes.
几乎所有的模块函数都依赖于基础的 random() 函数,该函数在一个半开放的范围 [0.0, 1.0)内(包括0.0,不包括1.0),产生一个随机的,单一的浮点数.python使用梅森扭曲算法作为核心的生成器,它产生53位精度的浮点数,并且以2**19937-1作为一个周期。下面算法用C实现,既是快速的也是线程安全的。梅森扭曲算法是目前实际使用中的经过广泛测试的随机数生成器之一。然而,可以完全确定的是,它并不适合所有的目的,并且完全不适合加密的目的。
The functions supplied by this module are actually bound methods of a hidden instance of the random.Random class. You can instantiate your own instances of Random to get generators that don’t share state.
该模块提供的函数实际上,绑定在一个隐藏的random.Random类的实例上,你可以实现你自己的random实例去获得一个不共享状态的生成器。
Class Random can also be subclassed if you want to use a different basic generator of your own devising: in that case, override the random(), seed(), getstate(), and setstate() methods. Optionally, a new generator can supply a getrandbits() method — this allows randrange() to produce selections over an arbitrarily large range.
random类也可以子类化,如果你想使用一个不同于基础生成器的生成器,如果要那样做,就覆写random(), seed(),getstate(), setstate() 方法。还可以更进一步的提供一个getrandbits() 方法,它使得randrange()函数可以产生任意大范围的选项。
The random module also provides the SystemRandom class which uses the system function os.urandom() to generate random numbers from sources provided by the operating system.
random模块还提供了使用系统函数 os.urandom() 来产生随机数的SystemRandom 类, os.urandom() 函数使用操作系统提供的资源。
Warning
警告
The pseudo-random generators of this module should not be used for security purposes. Use os.urandom() or SystemRandom if you require a cryptographically secure pseudo-random number generator.
本模块的伪随机数生成器不应该被应用于安全目的,如果你需要一个加密的安全的伪随机数生成器,请使用os.urandom()函数 或者 SystemRandom类。
Bookkeeping functions:
函数列表:
- random.seed(a=None, version=2)
-
Initialize the random number generator.
初始化随机数生成器。
If a is omitted or None, the current system time is used. If randomness sources are provided by the operating system, they are used instead of the system time (see the os.urandom() function for details on availability).
如果参数a被省略或者是None,则使用当前的系统时间来作为种子。如果操作系统提供有随机源,它们将被使用,不使用系统时间(细节请参考os.urandom() 函数)。
If a is an int, it is used directly.
如果参数a是一个整数,它将直接被拿来使用。
With version 2 (the default), a str, bytes, or bytearray object gets converted to an int and all of its bits are used. With version 1, the hash() of a is used instead.
version参数默认是2,str,bytes或者bytearray对象将使用它们的全部位转换为一个整数拿来使用,如果version是1,则使用hash(a)作为种子。
Changed in version 3.2: Moved to the version 2 scheme which uses all of the bits in a string seed.
3.2版本的改变:将使用字符串所有位做种子的方法移动到version=2的方案中。
- random.getstate()
-
Return an object capturing the current internal state of the generator. This object can be passed to setstate() to restore the state.
返回一个捕获了当前生成器内部状态的 object 对象,这个object 对象可以传递给setstate()函数,把状态存储起来。
- random.setstate(state)
-
state should have been obtained from a previous call to getstate(), and setstate() restores the internal state of the generator to what it was at the time getstate() was called.
setstate()函数存储 调用getstate() 时捕获的生成器状态 state,setstate()在使用时,必须先通过getstate() 函数获取生成器状态 state 。
- random.getrandbits(k)
-
Returns a Python integer with k 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() enables randrange() to handle arbitrarily large ranges.
返回 一个随机的k位的python整数,这个方法由梅森扭曲算法提供,其他的生成器会将它作为API实现的一个可选部分。当该方法可用的时候, getrandbits() 函数使得 randrange()函数可以处理任意大的范围。
Functions for integers:
关于整数的函数 :
- random.randrange(stop)
- random.randrange(start, stop[, step])
-
Return a randomly selected element from range(start, stop, step). This is equivalent to choice(range(start, stop, step)), but doesn’t actually build a range object.
从 range(start, stop, step)函数返回一个随机的整数。这个函数等价于choice(range(start, stop, step)),但是却不产生range对象。
The positional argument pattern matches that of range(). Keyword arguments should not be used because the function may use them in unexpected ways.
位置参数的匹配和range()函数相同。关键字参数却不应该使用,因为函数可能会在意想不到的方面使用关键字。
Changed in version 3.2: randrange() is more sophisticated about producing equally distributed values. Formerly it used a style like int(random()*n) which could produce slightly uneven distributions.
3.2版本的改变: randrange()函数生成相等的分布值,使用更加复杂的算法。在以前,它使用int(random()*n)这样的方案,该方案产生的随机数分布有轻微的不均匀。
- random.randint(a, b)
-
Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).
返回一个随机整数N, a <= N <= b,等价于randrange(a, b+1)。
Functions for sequences:
关于序列的函数:
- random.choice(seq)
-
Return a random element from the non-empty sequence seq. If seq is empty, raises IndexError.
从一个非空的序列seq中,返回一个随机的选项。如果seq参数是空序列,将抛出 IndexError。
- random.shuffle(x[, random])
-
Shuffle the sequence x in place. The optional argument random is a 0-argument function returning a random float in [0.0, 1.0); by default, this is the function random().
适当的混乱序列x,可选的参数random是一个0参数的函数,它返回一个随机的 [0.0, 1.0)之间的浮点数,它就是random()函数。
Note that for even rather small len(x), the total number of permutations of x is larger than the period of most random number generators; this implies that most permutations of a long sequence can never be generated.
注意即使 len(x) 的值比较小,x的排列数总数也比随机数生成器的周期要大,这意味着大序列的很多排序结果根本不会产生。
- random.sample(population, k)
-
Return a k length list of unique elements chosen from the population sequence or set. Used for random sampling without replacement.
从一个序列或者集合中返回一个k个元素的列表 。用于无替换的随机抽样。
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.
母体样本的成员不需要保证 hashable 或者 唯一,如果样本包含重复的选项,每次出现都有可能被选择进入最终的结果。
To choose a sample from a range of integers, use an range() object as an argument. This is especially fast and space efficient for sampling from a large population: sample(range(10000000), 60).
如果要从一个整数范围内选择一个整数样本,请使用rang对象来作为一个参数。使用sample(range(10000000), 60)这个方法,更加快速,更高效。
If the sample size is larger than the population size, a ValueError is raised.
如果抽样的数目比母体样本的数目还大,则抛出 ValueError。
The following functions generate specific real-valued distributions. Function parameters are named after the corresponding variables in the distribution’s equation, as used in common mathematical practice; most of these equations can be found in any statistics text.
下面的函数生成特殊的实数。 方程后面的参数都和通常的数学实践有一致的命名,许多这样的方程可以在统计学文本中找到。
- random.random()
-
Return the next random floating point number in the range [0.0, 1.0).
返回一个 [0.0, 1.0)范围内的随机浮点数。
- random.uniform(a, b)
-
Return a random floating point number N such that a <= N <= b for a <= b and b <= N <= a for b < a.
返回一个随机的浮点数N,如果 a <= b 则 a <= N <= b 如果b < a 则 b <= N <= a。
The end-point value b may or may not be included in the range depending on floating-point rounding in the equation a + (b-a) * random().
最后一个参数b包含还是不包含在结果的范围内取决于这个方程 a + (b-a) * random()。
- random.triangular(low, high, mode)
-
Return a random floating point number N such that low <= N <= high and with the specified mode between those bounds. The low and high bounds default to zero and one. The mode argument defaults to the midpoint between the bounds, giving a symmetric distribution.
返回一个随机的浮点数N, low <= N <= high,并且带有指定的模式。low和high的范围默认是0和1,mode参数的默认值是这个范围的中间点,给出一个对称分布。
- random.betavariate(alpha, beta)
-
Beta distribution. Conditions on the parameters are alpha > 0 and beta > 0. Returned values range between 0 and 1.
- random.expovariate(lambd)
-
Exponential distribution. lambd is 1.0 divided by the desired mean. It should be nonzero. (The parameter would be called “lambda”, but that is a reserved word in Python.) Returned values range from 0 to positive infinity if lambd is positive, and from negative infinity to 0 if lambd is negative.
- random.gammavariate(alpha, beta)
-
Gamma distribution. (Not the gamma function!) Conditions on the parameters are alpha > 0 and beta > 0.
The probability distribution function is:
x ** (alpha - 1) * math.exp(-x / beta) pdf(x) = -------------------------------------- math.gamma(alpha) * beta ** alpha
- random.gauss(mu, sigma)
-
Gaussian distribution. mu is the mean, and sigma is the standard deviation. This is slightly faster than the normalvariate() function defined below.
- random.lognormvariate(mu, sigma)
-
Log normal distribution. If you take the natural logarithm of this distribution, you’ll get a normal distribution with mean mu and standard deviation sigma. mu can have any value, and sigma must be greater than zero.
- random.normalvariate(mu, sigma)
-
Normal distribution. mu is the mean, and sigma is the standard deviation.
- random.vonmisesvariate(mu, kappa)
-
mu is the mean angle, expressed in radians between 0 and 2*pi, and kappa is the concentration parameter, which must be greater than or equal to zero. If kappa is equal to zero, this distribution reduces to a uniform random angle over the range 0 to 2*pi.
- random.paretovariate(alpha)
-
Pareto distribution. alpha is the shape parameter.
- random.weibullvariate(alpha, beta)
-
Weibull distribution. alpha is the scale parameter and beta is the shape parameter.
Alternative Generator:
可替换的生成器 :
- class random.SystemRandom([seed])
-
Class that uses the os.urandom() function for generating random 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, the seed() method has no effect and is ignored. The getstate() and setstate() methods raise NotImplementedError if called,并且序列是不可以再次产生的,
这个类使用 os.urandom()函数来从操作系统提供的源中产生随机数值, 并不是在所有的系统都可用,它不依赖于软件的状态。因此seed()函数是没有用的,被忽略的。getstate() 和 setstate() 函数如果被调用,将抛出 NotImplementedError。
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.
Complementary-Multiply-with-Carry recipe for a compatible alternative random number generator with a long period and comparatively simple update operations.
9.6.1. Notes on Reproducibility 再现性
Sometimes it is useful to be able to reproduce the sequences given by a pseudo random number generator. By re-using a seed value, the same sequence should be reproducible from run to run as long as multiple threads are not running.
有时候,使用伪随机数生成器重新生成序列是有用的,。当多线程没有运行时,通过重新使用一个seed值,相同的序列应该可以反复生成。
Most of the random module’s algorithms and seeding functions are subject to change across Python versions, but two aspects are guaranteed not to change:
大多数的随机模块算法和种子函数服从于python版本的变化,但是有2各方面是绝对不会发生改变的:
1、If a new seeding method is added, then a backward compatible seeder will be offered.
如果一个新的种子方法被添加进来,则必须提供一个向后兼容的种子生成器。
2、The generator’s random() method will continue to produce the same sequence when the compatible seeder is given the same seed.
生成器的random() 方法将持续的生成同样的序列,当兼容的种子生成器提供相同的种子的时候。
9.6.2. Examples and Recipes
Basic usage:
>>> random.random() # Random float x, 0.0 <= x < 1.0 0.37444887175646646 >>> random.uniform(, ) # Random float x, 1.0 <= x < 10.0 1.1800146073117523 >>> random.randrange() # Integer from to >>> random.randrange(, , ) # Even integer from to >>> random.choice('abcdefghij') # Single random element 'c' >>> items = [, , , , , , ] >>> random.shuffle(items) >>> items [, , , , , , ] >>> random.sample([, , , , ], ) # Three samples without replacement [, , ]
A common task is to make a random.choice() with weighted probabilities.
一个更常见的任务是通过 random.choice() 函数,对加权的可能性,做一个随机的选择
If the weights are small integer ratios, a simple technique is to build a sample population with repeats:
如果加权是一个小的比率,可以简单的通过重复值来建立一个抽样。
>>> weighted_choices = [('Red', 3), ('Blue', 2), ('Yellow', 1), ('Green', 4)] >>> population = [val for val, cnt in weighted_choices for i in range(cnt)] >>> random.choice(population) 'Green'
A more general approach is to arrange the weights in a cumulative distribution with itertools.accumulate(), and then locate the random value with bisect.bisect():
>>> choices, weights = zip(*weighted_choices) >>> cumdist = list(itertools.accumulate(weights)) >>> x = random.random() * cumdist[-1] >>> choices[bisect.bisect(cumdist, x)]
'Blue'
Python标准库3.4.3-random的更多相关文章
- 【python标准库模块二】random模块学习
random模块是用来生成随机数的模块 导入random模块 import random 生成一个0~1的随机数,浮点数 #随机生成一个0~1的随机数 print(random.random()) 生 ...
- python标准库总的random函数用法
Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等.random中的一些重要函数的用法:1 ).random() 返回0& ...
- python标准库00 学习准备
Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...
- Python标准库——走马观花
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...
- Python标准库概览
Python标准库通常被称为"自带的电池",自然地提供了广泛的功能,涵盖了大概200个左右的包与模块.不断有高质量的包或模块被开发出来,极大的丰富了标准库.但有些模块放在标准库中很 ...
- python标准库Beautiful Soup与MongoDb爬喜马拉雅电台的总结
Beautiful Soup标准库是一个可以从HTML/XML文件中提取数据的Python库,它能够通过你喜欢的转换器实现惯用的文档导航,查找,修改文档的方式,Beautiful Soup将会节省数小 ...
- python第六天 函数 python标准库实例大全
今天学习第一模块的最后一课课程--函数: python的第一个函数: 1 def func1(): 2 print('第一个函数') 3 return 0 4 func1() 1 同时返回多种类型时, ...
- 转--Python标准库之一句话概括
作者原文链接 想掌握Python标准库,读它的官方文档很重要.本文并非此文档的复制版,而是对每一个库的一句话概括以及它的主要函数,由此用什么库心里就会有数了. 文本处理 string: 提供了字符集: ...
- Python 标准库一览(Python进阶学习)
转自:http://blog.csdn.net/jurbo/article/details/52334345 写这个的起因是,还是因为在做Python challenge的时候,有的时候想解决问题,连 ...
- Python标准库 (pickle包,cPickle包)
在之前对Python对象的介绍中 (面向对象的基本概念,面向对象的进一步拓展),我提到过Python“一切皆对象”的哲学,在Python中,无论是变量还是函数,都是一个对象.当Python运行时,对象 ...
随机推荐
- python flask框架学习(二)——第一个flask程序
第一个flask程序 学习自:知了课堂Python Flask框架——全栈开发 1.用pycharm新建一个flask项目 2.运行程序 from flask import Flask # 创建一个F ...
- 数据标记系列——图像分割 & Curve-GCN
在之前的文章中(参考:),我们提到了Polygon-RNN++在数据标注中的应用.今天不得不提到多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果显示图像标注速度提升10倍. Cu ...
- HDU3853 LOOPS 期望DP基础题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3853 题目大意(只是大意,名字什么的可能和原题描述不一样~): 爱丽丝与华容道 题目描述 爱丽丝是一个 ...
- AWS 消息服务(九)
松耦合架构 概述 使用独立的组件设计架构,降低相互依赖,当一个组件出现故障时,其他不受影响 利用ELB和SQS来打破传统服务器各层的关联,成为各层之间的中介,各层的故障和扩展均由中介自助处理 系统的耦 ...
- mysql函数concat与group_concat使用说明
mysql函数concat与group_concat使用说明concat()函数<pre>mysql> select concat(',',name,',') from `user` ...
- 任务调度之Quartz.Net配置文件
前面介绍的任务的创建执行是通过代码来实现的,当要添加一个任务的时候就非常的不灵活,做不到热插拔.而通过配置文件的方式实现配置化,可以做到在添加一个任务的话,我们可以新建一个类库来定义Job做到热插拔. ...
- phaser三个学生做题目
3个学生一起参加考试,一共有三道题,要求所有学生到齐才能开始考试,全部同学都做完第一题,学生才能继续做第二题,全部学生做完了第二题,才能做第三题,所有学生都做完的第三题,考试才结束 public cl ...
- 分布式自增ID算法snowflake
分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的,作为索引非常不好,严重影响性能. ...
- (二)spring Security 自定义登录页面与校验用户
文章目录 配置 security 配置下 MVC 自定义登录页面 自定义一个登陆成功欢迎页面 效果图 小结: 使用 Spring Boot 的快速创建项目功能,勾选上本篇博客需要的功能:web,sec ...
- 随记sqlserver学习笔记(一)
create database testuse test --部门表create table department( dept_id int not null identity primary key ...