非常教程

Python参考手册

数字与数学 | Numeric & Mathematical

random

源代码: Lib / random.py

该模块为各种分配实施伪随机数发生器。

对于整数,从一个范围统一选择。对于序列,随机元素的统一选择,就地生成列表的随机置换的函数,以及无需替换的随机采样函数。

在实际情况中,有函数可以计算均匀,正态(高斯),对数正态,负指数,伽玛和贝塔分布。为了产生角度分布,冯·米塞斯分布是可用的。

几乎所有的模块函数都依赖于基本函数random(),它在半开放范围[0.0,1.0)内均匀地生成随机浮点数。Python使用Mersenne Twister作为核心生成器。它生成53位精度浮点数,周期为2 ** 19937-1。C中的底层实现既快速又线程安全。Mersenne Twister是现存最广泛测试的随机数生成器之一。然而,它是完全确定性的,并不适用于所有目的,并且完全不适用于加密目的。

这个模块提供的函数实际上是random.Random类的隐藏实例的绑定方法。您可以实例化您自己的实例Random以获取不共享状态的生成器。这对多线程程序特别有用,Random为每个线程创建一个不同的实例,并使用该jumpahead()方法使每个线程看到的生成序列不重叠。

Random也可以,如果你想用你自己设计的不同的基本发电机子类:在这种情况下,覆盖random()seed()getstate()setstate()jumpahead()方法。可选地,新的发生器可以提供一种getrandbits()方法 - 这允许randrange()在任意大的范围内产生选择。

版本2.4中的新功能:该getrandbits()方法。

作为子类的一个例子,random模块提供了WichmannHill在纯Python中实现替代生成器的类。该类提供了一种向后兼容的方式来重现Python早期版本的结果,该版本使用Wichmann-Hill算法作为核心生成器。请注意,这个Wichmann-Hill发生器不能再推荐使用:它的周期由于现代标准而太短,并且产生的序列已知会通过一些严格的随机性测试。请参阅下面的参考资料,了解修复这些缺陷的最新变体。

在版本2.3中更改:MersenneTwister将Wichmann-Hill替换为默认生成器。

random模块还提供了SystemRandom使用系统函数os.urandom()从操作系统提供的源生成随机数的类。

警告

该模块的伪随机生成器不应用于安全目的。使用os.urandom()或者SystemRandom如果你需要一个密码安全的伪随机数字发生器。

簿记功能:

random.seed(a=None)

初始化随机数发生器的内部状态。

None或者从当前时间或从操作系统特定的随机源(如果可用)没有参数种子(os.urandom()有关可用性的详细信息,请参阅该函数)。

如果a不是None或a int或a long,则hash(a)用它代替。请注意,某些类型的哈希值在PYTHONHASHSEED启用时不确定。

在版本2.4中更改:以前没有使用操作系统资源。

random.getstate()

返回捕获发生器当前内部状态的对象。该对象可以传递setstate()到恢复状态。

2.1版本中的新功能。

版本2.6中更改:在Python 2.6中生成的状态值不能加载到早期版本中。

random.setstate(state)

状态应该是从以前的调用中获得的getstate(),并将setstate()发生器的内部状态恢复到当时getstate()所调用的状态。

2.1版本中的新功能。

random.jumpahead(n)

将内部状态更改为与当前状态不同并可能远离的状态。n是用于扰乱当前状态向量的非负整数。这对于多线程程序以及Random类的多个实例是非常有用的:setstate()或者seed()可以用来强制所有实例进入相同的内部状态,然后jumpahead()可以用来强制实例的状态相隔甚远。

2.1版本中的新功能。

在版本2.3中进行了更改:跳到特定状态,前进n步,jumpahead(n)跳转到另一个可能被多个步骤分隔的状态。

random.getrandbits(k)

longk个随机位返回一个python int 。该方法由MersenneTwister生成器提供,其他一些生成器也可以将其作为API的可选部分提供。可用时,getrandbits()可以randrange()处理任意大的范围。

2.4版本中的新功能。

整数函数:

random.randrange(stop)random.randrange(start, stop[, step])

从中随机选择一个元素range(start, stop, step)。这相当于choice(range(start, stop, step)),但实际上并不构建范围对象。

1.5.2版本的新功能。

random.randint(a, b)

返回一个随机整数N使得a <= N <= b

序列的功能:

random.choice(seq)

从非空序列seq中返回一个随机元素。如果seq为空,则引发IndexError

random.shuffle(x[, random])

将序列x随机混合。可选参数random是一个0参数函数,返回[0.0,1.0)中的随机浮点数; 默认情况下,这是该功能random()

请注意,即使相当小len(x)x的排列总数大于大多数随机数发生器的周期; 这意味着长序列的大部分排列永远不会生成。

random.sample(population, k)

返回从总体序列中选择的独特元素的k长度列表。用于无需更换的随机抽样。

2.3版本的新功能。

返回包含来自群体的元素的新列表,同时保持原始人口不变。结果列表按选择顺序排列,以便所有子片也将是有效的随机样本。这允许抽奖获奖者(样本)被划分为大奖和第二名获奖者(子公司)。

人口成员不必是可排除的或独特的。如果总体包含重复,则每个事件都是样本中可能的选择。

要从一系列整数中选择一个样本,请使用一个xrange()对象作为参数。这对于从大量人群中抽样来说尤其快速且节省空间:sample(xrange(10000000), 60)

以下函数生成特定的实值分布。函数参数是根据分布方程中的相应变量命名的,正如常用的数学实践中所用的那样; 大多数这些方程可以在任何统计文本中找到。

random.random()

返回范围[0.0,1.0)中的下一个随机浮点数。

random.uniform(a, b)

返回一个随机浮点数N,以便a <= N <= bfor a <= bb <= N <= afor b < a

b取决于等式中的浮点舍入,终点值可能包含或不包含在范围内a + (b-a) * random()

random.triangular(low, high, mode)

返回一个随机的浮点数Nlow <= N <= high并使用这些边界之间的指定模式。该界默认的0和1。所述模式参数默认为边界之间的中点,给人一种对称分布。

2.6版本中的新功能。

random.betavariate(alpha, beta)

Beta分布。参数条件是alpha > 0beta > 0。返回值介于0和1之间。

random.expovariate(lambd)

指数分布。lambd是1.0除以所需的平均值。它应该是非零的。(该参数将被称为“拉姆达”,但是这是在Python保留字。)返回值的范围从0到正无穷大如果lambd为正,且从负无穷大到0,如果lambd为负。

random.gammavariate(alpha, beta)

伽马分布。(不是伽玛函数!)参数条件是alpha > 0beta > 0

概率分布函数是:

          x ** (alpha - 1) * math.exp(-x / beta)
pdf(x) =  --------------------------------------
            math.gamma(alpha) * beta ** alpha

random.gauss(mu, sigma)

高斯分布。mu是平均值,而σ是标准偏差。这比normalvariate()下面定义的函数稍快。

random.lognormvariate(mu, sigma)

记录正态分布。如果你采用这种分布的自然对数,你将得到一个平均值为mu和标准偏差σ的正态分布。可以有任何价值,西格玛必须大于零。

random.normalvariate(mu, sigma)

正态分布。mu是平均值,而σ是标准偏差。

random.vonmisesvariate(mu, kappa)

mu是平均角度,以弧度表示,介于0和2 * pi之间kappa是浓度参数,必须大于或等于零。如果kappa等于零,则该分布在0到2 * pi的范围内降低到均匀的随机角度。

random.paretovariate(alpha)

帕累托分布。alpha是形状参数。

random.weibullvariate(alpha, beta)

威布尔分布。alpha是比例参数,beta是形状参数。

替代发电机:

class random.WichmannHill([seed])

实现Wichmann-Hill算法的类作为核心生成器。具有所有相同的方法Random以及whseed()下面描述的方法。因为这个类是用纯Python实现的,所以它不是线程安全的,可能需要调用之间的锁。发生器的周期是6,953,607,871,644,它足够小以至于需要注意两个独立的随机序列不重叠。

random.whseed([x])

这是过时的,提供了与2.1之前的Python版本的位级兼容性。详情请参阅seed()whseed()不能保证不同的整数参数产生不同的内部状态,并且总共可以产生不超过约2 ** 24个不同的内部状态。

class random.SystemRandom([seed])

使用该os.urandom()函数从操作系统提供的源生成随机数的类。不适用于所有系统。不依赖软件状态,序列不可重现。因此,seed()jumpahead()方法都没有效果,被忽略。该getstate()setstate()方法提高NotImplementedError,如果调用。

2.4版本中的新功能。

基本用法的例子:

>>> random.random()        # Random float x, 0.0 <= x < 1.0
0.37444887175646646
>>> random.uniform(1, 10)  # Random float x, 1.0 <= x < 10.0
1.1800146073117523
>>> random.randint(1, 10)  # Integer from 1 to 10, endpoints included
7
>>> random.randrange(0, 101, 2)  # Even integer from 0 to 100
26
>>> 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]

数字与数学 | Numeric & Mathematical相关

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法