Python random 模块详解

我们可以先来了解下伪随机数和真随机数的概念。

伪随机数:伪随机数是用确定性的算法计算出来自[0,1]均匀分布的随机数序列。并不真正的随机,但具有类似于随机数的统计特征,如均匀性、独立性等。在计算伪随机数时,若使用的初值(种子)不变,那么伪随机数的数序也不变。伪随机数可以用计算机大量生成,在模拟研究中为了提高模拟效率,一般采用伪随机数代替真正的随机数。模拟中使用的一般是循环周期极长并> > 能通过随机数检验的伪随机数,以保证计算结果的随机性。</br>
---百度百科

真正的随机数是使用物理现象产生的:比如掷钱币、骰子、转轮、使用电子元件的噪音、核裂变等等,这样的随机数发生器叫做物理性随机数发生器,它们的缺点是技术要求比较高。</br>
---百度百科

如果觉得上述定义过于笼统的话,可以参考下这篇博客:https://blog.csdn.net/czc1997/article/details/78167705

以下内容基于 Python 3.6 版本 </br>
参考文档:https://docs.python.org/3/library/random.html

Python 的 random 模块概述

根据 Python 官方文档的说明,random 模块提供了不同分布下伪随机数生成器的实现。并且以梅森旋转算法(Mersenne Twister)作为生成器内核进行随机数生成。

random 模块函数列举

基础方法
random.seed(a=None, version=2)

当 a 的值没有设置时,则会使用当前系统时间作为 a 的值传入。从下面的例子中可以看出,设置 seed() 函数传入一个固定值的时候,生成的下一个随机数也会是固定的。

>>> import random

>>> random.seed(1)
>>> random.random()
0.13436424411240122

>>> random.seed(1)
>>> random.random()
0.13436424411240122

>>> random.seed(1)
>>> random.random()
0.13436424411240122
random.getstate()

返回一个捕获到的 生成器当前内部状态 的对象,可以将此对象传递给 setstate() 以恢复到这个状态。

random.setstate()

state 应该是从之前调用 getstate() 获得的,而 setstate() 将生成器的内部状态恢复到调用 getstate() 时的状态。根据下面的例子可以看出,由于生成器内部状态相同时会生成相同的下一个随机数,我们可以使用 getstate() 和 setstate() 对生成器内部状态进行获取和重置到某一状态下。

>>> import random

>>> state = random.getstate()
>>> random.random()
0.15039710215996194
>>> random.random()
0.29023339773680357

>>> random.setstate(state)
>>> random.random()
0.15039710215996194
random.getrandbits(k)

返回一个 0~2^k 的随机整数,该方法随 Mersenne Twister 一起提供,getrandbits() 可以使 randrange() 能够处理任意大的范围。

整数方法
random.randrange(stop)
random.randrange(start, stop[, step])

从 range(start, stop[, step]) 中选择一个随机数返回,但其实并不会创建一个 range(start, stop[, step])

random.randint(a, b)

返回 [a,b] 范围内的整数,它实际上来自于 random.randrange(a, b+1)

序列方法
random.choice(seq)

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

random.choices(population, weights=None, *, cum_weights=None, k=1)

从 population 序列中随机选取 k 个元素组成列表并返回,如果 population 为空则引发 IndexError 。

random.shuffle(x[, random])

随机打乱序列 x 中的元素排列,可选参数random是一个无参函数,在[0.0,1.0)中返回随机浮点数,默认情况下使用 random() 函数。另外,x 必须是可变序列。如果想打乱不可变序列的元素排列,可以使用 sample(x, k=len(x)) 。

random.sample(population, k)

从 population 序列中随机不重复选取 k 个元素组成列表并返回,并且不会对原序列造成任何影响。返回的列表将按照选择的顺序进行排列。如果 k 大于 population,则会引发 ValueError 。

真值分布
random.random()

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

random.uniform(a, b)

返回 [a, b] 范围内的随机浮点数。

random.triangular(low, high, mode)
random.betavariate(alpha, beta)

β分布。返回的结果在0~1之间

random.expovariate(lambd)

指数分布。 lambd是1.0除以所需的平均值。它应该是非零的。

random.gammavariate(alpha, beta)

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

random.gauss(mu, sigma)

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

random.lognormvariate(mu, sigma)

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

random.normalvariate(mu, sigma)

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

random.vonmisesvariate(mu, kappa)

卡帕分布

random.paretovariate(alpha)

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

random.weibullvariate(alpha, beta)

威布尔分布。 alpha是scale参数,beta是shape参数。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,444评论 4 365
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,867评论 1 298
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,157评论 0 248
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,312评论 0 214
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,673评论 3 289
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,802评论 1 223
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,010评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,743评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,470评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,696评论 2 250
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,187评论 1 262
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,538评论 3 258
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,188评论 3 240
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,127评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,902评论 0 198
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,889评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,741评论 2 274

推荐阅读更多精彩内容

  • 方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math...
    GB_speak阅读 40,340评论 2 6
  •   random是python中用来实现伪随机数生成器的模块,其所有功能均是基于一个基本函数random(),该函...
    Manfestain阅读 286评论 0 0
  • 目录 [TOC] 引言 量化交易是指以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来...
    雷达熊阅读 945评论 0 2
  • 概述 该模块为多种分布实现伪随机数生成器。 对于整数,在某范围内均匀选择。 对于序列,对随机元素均匀选择,通过产生...
    hao555sky阅读 604评论 0 0
  • 我是金黄之翼 乘着透亮的光芒 不会再迷失方向 缠缠绵绵的细雨,欲走又回,从昨天到今天。 好久没有晚上来过学院,教学...
    D012希玛太原阅读 169评论 1 1