随机数生成是日常工作中经常使用的功能。下面简要介绍下Python的随机数生成标准库random。
一、常用函数
(1)生成0和1之间的浮点数,random()
生成区间为[0,1)
import random
print(random.random())
输出结果:0.8092116913076974
(2)生成a和b之间的整数,randint(a,b)
生成区间为[a,b]
print(random.randint(-10,10))
输出结果:9
a必须小于等于b,如果a==b,则输出a。
print(random.randint(10,10))
输出结果:10
(3)生成a和b之间的浮点数,unifrom(a,b),也是均匀分布,因为非常常用放在这里。
生成区间为[a,b]
print(random.uniform(-10,10))
输出结果:-4.109021075631352
这个函数中,a可以大于b,生成的是min(a,b)和max(a,b)之间的浮点数。
(4)生成a和b之间某个范围的整数,randrange(a,b,step)
生成区间为:在[a,b]范围内,从a开始(包含a),每隔step的数形成的集合。
print(random.randrange(0,10,2))
输出结果:生成[0,10]之前的偶数
print(random.randrange(1,10,2))
输出结果:生成[0,10]之前的奇数
二、操作序列的函数
(1)从一个序列seq中随机选取一个元素,choice(seq)
seq1 = [1,2,3,4,5]
seq2 = ((1,2),(3,4),(5,6))
seq3 ="abcdef"
print(random.choice(seq1))
print(random.choice(seq2))
print(random.choice(seq3))
输出结果:
5
(3, 4)
a
(2)将一个列表list中的元素随机打乱,shuffle(list)
注意,shuffle函数需要修改原序列,因此输入的序列seq必须是可更改的,所以只支持list类型。shuffle有个很传神的名字:洗牌。
seq = [1,2,3,4,5]
print(random.shuffle(seq),seq,sep='\n')
输出结果:
None
[2, 5, 1, 4, 3]
(3)从一个序列中随机取出k个元素,sample(seq,k)
seq = [1,2,3,4,5]
print(random.sample(seq,3),seq,sep='\n')
输出结果:
[4, 5, 2]
[1, 2, 3, 4, 5]
注意几个方面:一是sample并不改变原序列,因此输入序列seq可以是元组、字符串、set等数据类型。二是取出k个元素是从不同位置取值的,因此如果原序列无重复元素,形成的新序列也不会存在重复元素。三是不管输入序列seq是什么类型,sample返回的是list类型,看下例。
seq = "abcdef"
print(random.sample(seq,3),seq,sep='\n')
输出结果:
['c', 'a', 'd']
abcdef
三、随机生成符合某种分布的数据
(1)均匀分布,uniform(a,b)
见第一节描述。非常常用。
(2)正态分布,normalvariate(mu,sigma)
mu:均值
sigma:标准差
mu=0,sigma=1为标准正态分布。
除了均匀分布,正态分布用的是最多的。
import random
import numpy as np
import time
st = time.clock()
N =1000000
n = []
for i in range(N):
    n.append(random.normalvariate(0,1))
print("均值=",np.mean(n))
print("标准差=",np.std(n))
print("耗时=",time.clock() - st)
输出结果:
均值= -7.42643413388e-05
标准差= 1.00049689373
耗时= 5.702438655147374
可以看出,随机生成1000000个数,这些数符合正态分布。
(3)高斯分布,gauss(mu,sigma)
就是正态分布,采用了不同的实现方式,据说运行速度更快。
import random
import numpy as np
import time
st = time.clock()
N =1000000
n = []
for i in range(N):
    n.append(random.gauss(0,1))
print("均值=",np.mean(n))
print("标准差=",np.std(n))
print("耗时=",time.clock() - st)
输出结果
均值= 0.000604319020838
标准差= 0.999634159673
耗时= 4.827287158657131
1000000个数快了不到1秒,也没快太多。
(4)还有生成三角形分布、对数分布、指数分布、β分布、伽马分布等的函数
triangular(low, high, mode)三角形分布
lognormvariate(mu, sigma)对数分布
expovariate(lambd)指数分布
gammavariate(alpha, beta)伽马分布
等等。实际工作中,这些分布比均匀分布和正态分布用的都少的多。

Python的random相关推荐

  1. python中random模块中包含了随机数相关的功能函数_Python中random模块生成随机数详解...

    print random.randint(12, 20) #生成的随机数n: 12 <= n <= 20 print random.randint(20, 20) #结果永远是20 #pr ...

  2. 从洗牌算法谈起--Python的random.shuffle函数实现原理

    此文首发于我的个人博客:从洗牌算法谈起–random.shuffle实现原理 - zhang0peter的个人博客 昨天看知乎的时候看到了洗牌算法(Knuth shuffle, 最初版本叫Fisher ...

  3. python中sample是什么意思_基于Python中random.sample()的替代方案

    python中random.sample()方法可以随机地从指定列表中提取出N个不同的元素,但在实践中发现,当N的值比较大的时候,该方法执行速度很慢,如: numpy random模块中的choice ...

  4. python的random模块生成随机数

    python的random函数 random.random() 生成0-1之间的随机数 random.uniform(a,b)生成a,b之间的浮点数 random.randint(a,b)生成a,b之 ...

  5. python的random函数_关于random()的详细介绍

    这篇文章主要介绍了Python随机生成数模块random使用实例,本文直接给出示例代码,需要的朋友可以参考下代码如下:#!/usr/bin/env python#coding=utf-8import ...

  6. python random包含尾部吗_你真的了解Python的random模块吗?

    用于生成伪随机数 源码位置: Lib/random.py(看看就好,千万别随便修改) 真正意义上的随机数(或者随机事件)在某次产生过程中是按照实验过程中表现的分布概率随机产生的,其结果是不可预测的,是 ...

  7. python从random生成列表_详解Python利用random生成一个列表内的随机数

    详解Python利用random生成一个列表内的随机数 首先,需要导入random模块: import random 随机取1-33之间的1个随机数,可能重复: random.choice(range ...

  8. python中random函数用法_random函数的用法

    展开全部 用法: 1.随2113机生成(0,1)之间的浮点数 random.random() 2.随机生成100-200的整数5261 random.randint(100,200) 3.随机产生范围 ...

  9. 【Python】Python随机数random模块的应用

    用代码举栗子 import randomelements = ["放逐之刃", "刀锋舞者", "青钢影", "诡术妖姬" ...

  10. python的random模块怎么写_Python常用标准库之random模块

    一.概述 在我们日常写代码的过程中,经常需要产生随机数,Python为我们提供了random库,该模块实现了各种分布的伪随机数生成器,本文主要讲解其常用方法,更多详细内容请移步:Random官方文档. ...

最新文章

  1. 会声会影x7 每次安装均会提示:已安装这个产品的另一个版本
  2. python百度手势识别_【百度大脑新品体验】手势识别
  3. 音视频技术开发周刊 55期
  4. android 万能倒计时,时分秒倒计时
  5. Cocos Creator JS 获取当前日期与时间
  6. 小学期实践心得(1)
  7. OCI runtime create failed: container_linux.go:370: starting container process caused: process_linux.
  8. 七十三、分发系统介绍、expect脚本远程登录、expect脚本远程执行命令、expect传递参数...
  9. 玩游戏显示计算机内存不足怎么办,电脑魔兽世界内存不足怎么办
  10. 启动SQL Server服务器以及新建连接的方法
  11. 机房重构-panel控件
  12. 132 django模版文件的使用
  13. 【chm】Python提取chm数据
  14. 还不错的微信活码程序源码+功能强大
  15. 每月更新的Mac软件序列号查询小机器人KCNScrew Pack
  16. python实现微信机器人: 登录微信、消息接收、自动回复
  17. TPC好像是这么回事儿
  18. IP地址字符串转换成16进制例程
  19. linux下usb充电问题,如何解决在Ubuntu上iPad不能充电的问题
  20. 硅谷企业SaaS服务教父:如何衡量与优化SaaS企业的核心指标

热门文章

  1. 【LeetCode】0136. 只出现一次的数字
  2. 处理Matlab Coder之后, Compiler can't find tmwtypes.h问题
  3. 蓝桥杯-9-1九宫格(java)
  4. 【Spring注解系列04】@Condition条件注解
  5. eclipse快捷键 包括查找类、方法、变量
  6. (JAVA学习笔记) 类与对象小结
  7. IDEA整合 ssm的详细demo(使用maven)
  8. 杭电oj1176,2084java实现
  9. 排序算法 | 快速排序,算法的图解、实现、复杂度和稳定性分析与优化
  10. Spring事务的处理流程、传播属性、及部分释疑