本文基于Python 3.6.5的官文random编写。

random模块简介

random为各种数学分布算法(distributions)实现了伪随机数生成器。

对于整数,是从一个范围中均匀选择(uniform selection);

对于序列,是从一个随机元素的均匀选择;

一个函数实现列表的随机排列(random permutation),是在列表本身实现了(in-place,改变了列表),而用于随机采样(random sampling)的函数则没有对列表本身进行更改。

On the real line(怎么翻译?),有函数计算均匀、正态(高斯)、对数正态、负指数、伽马和beta分布,对于产生角度分布,可以使用冯米泽斯分布。(原文引用如下,很遗憾,这些分布都忘记了,看来短期内很难去做ML、AI了啊,)

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.

几乎所有的模块函数都依然与基本函数random(),它用一种均匀的方式产生了一个位于半开区间[0.0, 1.0)(0 ≤ x < 1.0)的随机浮点数。Python使用 梅森转换(Mersenne Twister,是什么?)作为核心生成器(53位的浮点精度和2**19937 -1的period)。用C实现的底层是快速且线程安全的。梅森转换 是一个现存的经过了最广泛测试的随机数生成器。但是,由于其完全的确定性(being completely deterministic,是指random产生的随机数每一个可以推断出来吗?),它不适合于某系场景,并且完全不适合 加密 场景。

本模块提供的函数实际上都绑定到了一个random.Random的隐藏实例,开发者也可以自己实例化Random以获取不共享状态(share state,什么事state?)生成器。

类Random也可以被继承以便实现一个开发者自己设计出来的不同的基础生成器...(省略了)。

random还提供了SystemRandom类,这个类使用系统函数os.urandom()从操作系统提供的源去产生随机数。

警告:这个模块的伪随机数生成器不应该用作安全目的,对于安全和加密用途,可以参考secrets模块。

接下来将要介绍(罗列)random中的函数,包括:

-簿记函数(Bookkeeping functions)

-用于整数的函数

-用于序列的函数

-实值分别

-可替换的生成器

-关于重复问题的注意项

簿记函数

random.seed(a=None, version=2)

初始化随机数生成器。

random.getstate()

random.setstate(state)

random.getrandbits(k)

用于整数的函数

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

从range(start, stop, step)中随机选择一个元素返回。功能和choice(range(start, stop, step))相同,但不会制造构建一个range对象。

random.randint(a, b)

返回一个随机整数N,a ≤ N ≤ b。randrange(a, b+1)的别名。

用于序列的函数

random.choice(seq)

返回非空序列中的一个随机元素,如果seq是空,产生IndexError。

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

从population中选择k个元素组成列表并会改变population,如果population为空,产生IndexError。

3.6版本中新增加的函数,有一些复杂,尚未弄清楚。

官文示例:运行过示例后,了解到了函数中 权重 的概念了

random.shuffle(x[, random])

就地(in place)打乱一个序列x。参数random是一个无参数函数,返回一个[0.0, 1.0)的值,默认使用random()。

对于不可变序列,返回一个新的打乱了的序列,使用sample(x, k=len(x))替代。

random.sample(population, k)

从参数population(序列 或 集合)中选择k个元素(官文中的unique elements怎么翻译?)组成列表返回。用于随机采样,但不会改变population。

如果采样长度大于参数population的长度,产生ValueError。

示例:

实值分布

下面的函数用于生产指定的实值分布。函数参数 在 分布的方程式中相应的变量后面 添加名称,就像在一般的数学使用中一样,大部分方程式可以在统计学文本中找到。

简单示例如下:用起来挺简单的,但在哪里用,内在逻辑怎样就完全不知道了,

random.random()

返回下一个位于[0.0, 1.0)的随机浮点数。

random.uniform(a, b)

random.triangular(low, high, mode)

random.betavariate(alpha, beta)

random.expovariate(lambd)

random.gammavariate(alpha, beta)

random.gauss(mu, sigma)

random.lognormvariate(mu, sigma)

random.normalvariate(mu, sigma)

random.vonmisesvariate(mu, kappa)

random.paretovariate(alpha)

random.weibullvariate(alpha, beta)

可替换的生成器

class random.SystemRandom([seed])

和Random类并列,其替换函数。

使用os.urandom()函数创建随机数,其源由操作系统提供,但并非所有系统都支持。

不依赖于软件状态,序列是不可以重复制造的,因此,seed()方法是无效且被忽略的。

调用getstate()和setstate()方法会产生NotImplementError错误(源码显示,此类没有实现这两个函数)。

关于重复问题的注意项

有时候,能够重新制造由伪随机数生成器产生的序列是很有用的。通过复用种子数(seed value),在单个运行环境中(没有运行多线程),在相同的序列应该是可以重现的(翻译的意思可能对了,但大家还是看看下面的原文引用)。

the same sequence should be reproducible from run to run as long as multiple threads are not running.

大多数的 随机数模块的算法和种子函数(seeding functions) 会因为不同的Python版本而改变,但有两方面是可以保证的:

- 如果添加了新的种子方法(seeding method),那么一个向后兼容的seeder需要提供出来;

- 生成器的random()方法在给相同的种子到兼容的seeder时,会产生相同的序列。

后记

此文写的有些忧伤,它提醒孤很久之前是学过数学分布的,可是,现在几乎全部忘光光了。

对于上面的介绍了的函数,还是需要好好掌握的。

以后再次懂的数学分布了,再来完善此文。

在官文的末尾,还提到了一个用于统计学的模块statictics,有【机会】可以看看。

转载于:https://www.cnblogs.com/luo630/p/9177837.html

Python模块:Random(未完待续)相关推荐

  1. Python标准库-string模块《未完待续》

    >>> import string >>> s='hello rollen , how are you ' >>> string.capwords ...

  2. Python基础:内置异常(未完待续)

    Python基础:内置异常(未完待续) 参考文章: (1)Python基础:内置异常(未完待续) (2)https://www.cnblogs.com/luo630/p/9176768.html 备忘 ...

  3. python线程和进程-未完待续

    python线程和进程-未完待续 环境变量 0. 概念 1. 并行/并发 并行 并发 并行与并发的关系 2.进程/线程 基本概念 线程 多线程 队列 互斥锁/线程共享 阻塞 锁 条件锁 进程 多进程 ...

  4. 用python做归结演绎推理_Python中惯用的一些操作总结(未完待续)

    Python中常用的一些操作总结(未完待续) 写在前面的话 其实也没有什么可以写的,或者说完全没有价值.因为你只要动一动手指就可以在Google上找到我要写的这些东西.只是我还不习惯好久没有碰我的bl ...

  5. python爬虫requests源码链家_python爬虫——爬取链家房价信息(未完待续)

    爬取链家房价信息(未完待续) items.py # -*- coding: utf-8 -*- # Define here the models for your scraped items # # ...

  6. CTF论剑场(web) write up 未完待续

    CTF论剑场(web) write up web26 直接给你一串代码 <?php $num=$_GET['num']; $str=$_GET['str']; show_source(__FIL ...

  7. 阅读CariFaceParsing(未完待续。。。。)

    阅读CariFaceParsing(未完待续....) github 1. 数据集介绍 1.1 Helen_images 我们使用到的helen数据集从dataset链接中下载得到,(注意:我们下载的 ...

  8. 实现2020年TI杯大学生电子设计竞赛F题简易无接触温度测量、身份识别与口罩检测装置(未完待续)

    声明 本文仅在CSDN发布,其他均为盗版.请支持正版! 正版链接: https://blog.csdn.net/meenr/article/details/109298042 本文目录 *实现2020 ...

  9. RDataMining系列:Chapter 4 Decision Trees --决策树实现,未完待续

    ***************** 利用party来做决策树分类 ***************** 数据:iris data 目标: 利用Sepal.Length, Sepal.Width,Peta ...

  10. 蜂鸟E203图像识别--未完待续

    蜂鸟E203图像识别--未完待续 FPGA烧录 NICE核起什么作用 神经网络软核IP库NMSIS NN MCU200T使用Xilinx XC7A200T-2 FPGA芯片,接的摄像头要么是USB摄像 ...

最新文章

  1. 重新编译iptables
  2. python语言的数字类型_基本数据类型数字
  3. docker run 原理
  4. Java 斐波那契数列
  5. 最简单的 post 请求发起方式、调用其它系统接口
  6. 【Prince2科普】P2七大主题之变更
  7. Chrome 52的变化
  8. readline_Swift readLine(),Swift print()
  9. Docker部署项目的步骤,按步骤一步一步来,一切都会成功
  10. Eureka的元数据
  11. modscan32做主站 一直显示MODBUS MESSAGE TIME-OUT
  12. eclipse安卓插件ADT下载地址
  13. 推荐一款好玩的处理照片的软件 叫“可牛影像”
  14. PDFlib-6.0.3p1-Windows] license key 算法分析
  15. 前花椒直播CEO胡震生:我如何不花钱引爆的花椒直播
  16. 每日一题——有效的数独
  17. 区块链DAPP开发 以太坊智能合约框架有哪些
  18. 队测 逆序对 permut
  19. 读 活着 【思维导图版】
  20. 美国大学的交流访问学者怎样申请?

热门文章

  1. C语言 静音检测,ffmpeg静音检测 Autohotkey
  2. 对SQL语句中case when...then...else...end的理解
  3. 快速从入门到精通!成都java培训机构比较
  4. HTML5前期学习准备(一)
  5. 代码BUG之曲线救国
  6. 专利法上的抽象思想与具体技术 ——计算机程序算法的客体属性分析
  7. ArcGIS教程:什么是格网和经纬网?
  8. django 1.11.6—— Celery
  9. 所见即所得编辑器_Froala所见即所得编辑器
  10. backup exec 无法备份dag