pseudo-random number generators for various distributions.

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.

The pseudo-random generators of this module should not be used for security purposes. For security or cryptographic uses, see the secrets module.

The functions supplied by this module are actually bound methods of a hidden instance of the random.Random class.

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.

seed: 当设置相同的seed时,可以得到相同的随机数。

 random.seed(1)
a2 = random.random()
print(a2) random.seed(0)
a11 = random.random()
print(a11 == a1) result:
0.8444218515250481
0.13436424411240122
True

getstate:

Return an object capturing the current internal state of the generator. This object can be passed to setstate() to restore the state.

从下面的结果来看,可能和seed有关。

 s1 = random.getstate()  # a tuple of length 3
print(len(s1[1]), s1)
random.seed(0)
a1 = random.random()
s2 = random.getstate()
print(len(s2[1]), s2) random.seed(1)
a2 = random.random()
s3 = random.getstate()
print(len(s3[1]), s3) random.seed(0)
a11 = random.random()
s4 = random.getstate()
print(len(s4[1]), s4)
print(s4 == s2) result:
625 (3, (2147483648, ..., 3028008404, 624), None)
625 (3, (1372342863, ..., 418789356, 2), None)
625 (3, (2145931878, ..., 3656373148, 2), None)
625 (3, (1372342863, ..., 418789356, 2), None)
True

setstate: 貌似功能与seed一样,都是到达某一状态。

 random.seed(0)
s1 = random.getstate()
a1 = random.random()
s2 = random.getstate()
print(a1, s2 == s1) # s2 != s1, 因为生成了一次随机数,状态变了 random.seed(1)
a2 = random.random()
s3 = random.getstate()
print(s3 == s2) # False # random.seed(0)
random.setstate(s1) # 设置为s1才能使a11 == a1, 和s2状态不同。有点像翻书的过程,翻到那一页,首先看到的内容总是一样的。
s4 = random.getstate()
print(s4 == s1) # True
a11 = random.random()
s5 = random.getstate()
print(a11 == a1, s5 == s2) # True True 在s4 == s1的状态下,执行一个相同操作,执行后的状态也相同。

getrandbits:

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 random bits

is supplied with

 k = random.getrandbits(1)  # 0、1
k = random.getrandbits(2) # 0、1、2、3
k = random.getrandbits(3) # 0、1、2、3、4、5、6、7
print(k)

Functions for integers

randrange:

This is equivalent to choice(range(start, stop, step)).

Keyword arguments should not be used because the function may use them in unexpected ways.

randrange() is more sophisticated about producing equally distributed values. 【Formerly it used a style like int(random()*n) which could produce slightly uneven distributions.】

 r = random.randrange(2, 5)
c = random.choice(range(2, 5))
print(c)

randint(a, b):

Return a random integer N such that a <= N <= b. Alias for randrange(a, b+1).

Functions for sequences

choice(seq):

arg is a seq.

If seq is empty, raises IndexError.

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

Return a k sized list of elements chosen from the population with replacement(复位,即可以放回重复抽取). If the population is empty, raises IndexError.

If a weights sequence is specified, selections are made according to the relative weights. Alternatively, if a cum_weights sequence is given, the selections are made according to the cumulative weights (perhaps computed using itertools.accumulate()). For example, the relative weights [10, 5, 30, 5] are equivalent to the cumulative weights [10, 15, 45, 50]. Internally, the relative weights are converted to cumulative weights before making selections, so supplying the cumulative weights saves work.

If neither weights nor cum_weights are specified, selections are made with equal probability(从这点看来,前面的权重指的是某数值被选中的概率). If a weights sequence is supplied, it must be the same length as the population sequence. It is a TypeError to specify both weights and cum_weights.

 cs = random.choices([1, 3, 5, 7, 9], weights=[8, 6, 4, 2, 5], k=2)
print(cs) # with replacement, [3, 3]

shuffle(x[, random]):

Shuffle the sequence.

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().

To shuffle an immutable sequence and return a new shuffled list, use sample(x, k=len(x)) instead.

 l = [1, 3, 5, 7, 9, 3]
s = random.shuffle(l) # 修改序列本身,所以参数必须是可变类型。
print(l, s)

sample(population, k):

Return a k length list of unique elements chosen from the population sequence or set. Used for random sampling without replacement.

Returns a new list containing elements from the population while leaving the original population unchanged.

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 a range() object as an argument. This is especially fast and space efficient for sampling from a large population: sample(range(10000000), k=60).

If the sample size is larger than the population size, a ValueError is raised.

 # l = (1, 3, 5, 7, 9, 3)
l = [1, 3, 5, 7, 9, 3] #可变类型也可
s = random.sample(l, 2)
print(l, s) # (1, 3, 5, 7, 9, 3) [9, 1]

Real-valued distributions

random(): Return the next random floating point number in the range [0.0, 1.0).

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.

 equation:
return a + (b-a) * self.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.

gauss(mu, sigma):

Gaussian distribution. mu is the mean, and sigma is the standard deviation. This is slightly faster than the normalvariate() function.

标准库random的更多相关文章

  1. Python基础--人们一些最爱的标准库(random time)

    Python继续! random 包括返回随机数的函数. 这里跟C++一样,产生的是伪随机数,并非全然随机数. random中一些重要的函数: random() 返回0<n<=1的随机数n ...

  2. Python标准库---random模块的使用

    更新时间:2019.09.12(更新目录) 目录 1. 谈谈随机数 2. random模块   2.1 random.seed()   2.2 random.random()   2.3 random ...

  3. Python标准库Random

    基本方法 获取一个[0,1)的随机浮点数: import random print(random.random()) #输出 0.6701488343121276 获取指定区间的随机浮点数: impo ...

  4. Python标准库12 数学与随机数 (math包,random包)

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们已经在Python运算中看到Python最基本的数学运算功能.此外,math包 ...

  5. python标准库总的random函数用法

    Python标准库中的random函数,可以生成随机浮点数.整数.字符串,甚至帮助你随机选择列表序列中的一个元素,打乱一组数据等.random中的一些重要函数的用法:1 ).random() 返回0& ...

  6. python标准库介绍——27 random 模块详解

    ==random 模块== "Anyone who considers arithmetical methods of producing random digits is, of cour ...

  7. python常用标准库(math数学模块和random随机模块)

    常用的标准库 数学模块 import math ceil -- 上取整 对一个数向上取整(进一法),取相邻最近的两个整数的最大值. import math res = math.ceil(4.1) p ...

  8. python学习笔记系列----(八)python常用的标准库

    终于学到了python手册的最后一部分:常用标准库.这部分内容主要就是介绍了一些基础的常用的基础库,可以大概了解下,在以后真正使用的时候也能想起来再拿出来用. 8.1 操作系统接口模块:OS OS模块 ...

  9. windows下的c语言和linux 下的c语言以及C标准库和系统API

    1.引出我们的问题? 标准c库都是一样的!大家想必都在windows下做过文件编程,在linux下也是一样的函数名,参数都一样.当时就有了疑问,因为我们非常清楚 其本质是不可能一样的,源于这是俩个操作 ...

随机推荐

  1. 洛谷 P1016 旅行家的预算

    P1016 旅行家的预算 题目OJ链接https://www.luogu.org/problemnew/show/P1016 题目描述一个旅行家想驾驶汽车以最少的费用从一个城市到另一个城市(假设出发时 ...

  2. android 制作9.png图

    9.png图片与.png图片的具体不同之处.9.png图片的四周与普通的png图片相比多了一个像素位的白色区域,该区域只有在图片被还原和制造的时候才能看到,当打包后无法看见,并且图片的总像素会缩小2个 ...

  3. MVC项目实践,在三层架构下实现SportsStore-11,使用Knockout实现增删改查

    SportsStore是<精通ASP.NET MVC3框架(第三版)>中演示的MVC项目,在该项目中涵盖了MVC的众多方面,包括:使用DI容器.URL优化.导航.分页.购物车.订单.产品管 ...

  4. Java中使用FileputStream导致中文乱码问题的修改方案

    package com.pocketdigi; import java.io.File; import java.io.FileInputStream; import java.io.FileOutp ...

  5. 阿里云 ssh 登陆请使用(公)ip

    一直以为要要登陆使用的是私有的ip,最后才发现是使用共有ip, 如图 47.52.69.151 > ssh root@47.52.69.151 > 输入密码

  6. 理顺FFT

    DFT(Discrete Fourier Transform):离散傅立叶变换 直观的计算DFT算法复杂度为O(N*N). FFT(Fast Fourier Transformation):快速傅立叶 ...

  7. Socket网络编程--聊天程序(8)

    上一节已经完成了对用户的身份验证了,既然有了验证,那么接下来就能对不同的客户端进行区分了,所以这一节讲实现私聊功能.就是通过服务器对客户端的数据进行转发到特定的用户上, 实现私聊功能的聊天程序 实现的 ...

  8. Python3运算符

    一.算术运算符 二.比较运算符 三 .赋值运算符 四 .位运算符 按位运算符是把数字看作二进制来进行计算的.Python中的按位运算法则如下: 下表中变量 a 为 60,b 为 13二进制格式如下: ...

  9. laravel中artisan的用法

    如:

  10. 【QT】无需写connect代码关联信号和槽函数

    对于一些简单的事件判别,如点击按钮. 无需写代码关联信号和槽函数. connect(ui->Btnshowhello,SIGNAL(clicked(bool)),this,SLOT(Btnsho ...