数值模拟必备random模块

该模块实现了各种分布的伪随机数生成器。可以在区间内抽取一个随机数,可以在列表中抽取一个元素,可以从分布中抽取样本 。
random模块不能直接访问,需要导入 random 模块,然后通过 random 静态对象调用该方法。

import random 
1 生成随机数

随机生成器种子,在同一个种子下,生成同样的随机数

random.seed()  

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

random.random()

random.int(a,b) 生成整数,a <= N <= b。

random.randint(1,4) # 
2 
2 序列中随机选取一个

在序列range() 中随机选取一个整数random.randrange( start, stop , step )

random.randrange(1,5,2)
3

random.choice(population), 从非空序列 population 返回一个随机元素。 如果 seq 为空,则引发 IndexError.

random.choice([2,5,8]) 
8

random.choices(population, weights=None, *, cum_weights=None, k) . 从整体中按照权重抽取K个,权重序列长度必须等于population长度。 显然,不给定权重且k=1. 等价于
random.choice(population).

random.choices(['red', 'black', 'green'], [4, 10, 2], k=6)
['green', 'black', 'red', 'black', 'green', 'black']

random.sample(population, k, *, counts=None),返回从总体序列或集合中选择的唯一元素的 k 长度列表,即无重复(无放回)的随机抽样。

random.sample(['red', 'black', 'green'], 2) 
['red', 'green']

3.9版本之后,增加counts 形参,可以指定个数, random.sample([‘red’, ‘red’,‘red’,‘black’, ‘green’], 2)等价于random.sample([‘red’,‘black’, ‘green’],counts=[3,1,1], 2)

3从分布中抽取样本

常用的分布如下表:

函数分布
gauss(mu,sigma)/normalvarite(mu,sigma)正态分布
uniform(a,b)均匀分布
expovariate(lamda)指数分布
gammavariate(alpha,beta)Gamma 分布
lognormvariate(mu,sigma)对数正态分布
betavariate(alpha,beta)Beta 分布
weibullvariate(alpha,beta)Weibull 分布
paretovariate(alpha)Pareto 分布
vonmisesvariate(mu,kappa)von Mises 分布(
random.gauss(1,2)
-0.34372692554557815
random.uniform(1,2)
1.7719936383153665
random.expovariate(1)
0.079384517694696
random.gammavariate(1,3)
3.8134444290373866
random.lognormvariate(1,2)
2.561312589509173
random.betavariate(1,2)
0.03565784800319274
random.weibullvariate(1,2)
1.211306128111137
random.paretovariate(1)
1.709941711311189
random.vonmisesvariate(1,2)
2.377632588889548
data = [random.gammavariate(2,4) for i in range(10000)] # 抽取10000个gamma分布样本
#直方图
import matplotlib.pyplot as plt
plt.hist(data, bins=100,  color="#FF0000", alpha=.7)

在这里插入图片描述

4 打乱顺序

random.shuffle(x [, random])将序列 x 随机打乱位置。

a=[1,3,5,7,9]
random.shuffle(a);print(a) 
[3, 7, 5, 1, 9] #  原地打乱顺序
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值