详解用python生成随机数的几种方法


Posted in Python onAugust 04, 2019

今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。    

本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。

1 从给定参数的正态分布中生成随机数

当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,就可以调用python中现有的模块和函数来生成随机数了。这里调用了Numpy模块中的random.normal函数,由于逻辑非参简单,所有直接贴上代码如下:

import numpy as np
 
 
# 定义从正态分布中获取随机数的函数
def get_normal_random_number(loc, scale):
 """
 :param loc: 正态分布的均值
 :param scale: 正态分布的标准差
 :return:从正态分布中产生的随机数
 """
 # 正态分布中的随机数生成
 number = np.random.normal(loc=loc, scale=scale)
 # 返回值
 return number
 
 
# 主模块
if __name__ == "__main__":
 # 函数调用
 n = get_normal_random_number(loc=2, scale=2)
 # 打印结果
 print(n)
 # 结果:3.275192443463058

2 从给定参数的均匀分布中获取随机数的函数

考虑从均匀分布中获取随机数的时候,要事先知道均匀分布的下界和上界,然后调用Numpy模块的random.uniform函数生成随机数。

import numpy as np 
# 定义从均匀分布中获取随机数的函数
def get_uniform_random_number(low, high):
 """
 :param low: 均匀分布的下界
 :param high: 均匀分布的上界
 :return: 从均匀分布中产生的随机数
 """
 # 均匀分布的随机数生成
 number = np.random.uniform(low, high)
 # 返回值
 return number
 
 
# 主模块
if __name__ == "__main__":
 # 函数调用
 n = get_uniform_random_number(low=2, high=4)
 # 打印结果
 print(n)
 # 结果:2.4462417140153114

3 按照指定概率生成随机数

有时候我们需要按照指定的概率生成随机数,比如已知盒子中每种颜色的球的比例,猜测下一次取出的球的颜色。在这里介绍的问题和上面的例子相似,要求给定一个概率列表,从列表对应的数字列表或区间列表中生成随机数,分两部分讨论。

3.1 按照指定概率从数字列表中随机抽取数字

假设给定一个数字列表和一个与之对应的概率列表,两个列表对应位置的元素组成的元组即表示该数字在数字列表中以多大的概率出现,那么如何根据这些已知条件从数字列表中按概率抽取随机数呢?在这里我们考虑用均匀分布来模拟概率,代码如下:

import numpy as np
import random
 
 
# 定义从均匀分布中获取随机数的函数
def get_uniform_random_number(low, high):
 """
 :param low: 均匀分布的下界
 :param high: 均匀分布的上界
 :return: 从均匀分布中产生的随机数
 """
 # 均匀分布的随机数生成
 number = np.random.uniform(low, high)
 # 返回值
 return number
 
 
# 定义从一个数字列表中以一定的概率取出对应区间中数字的函数
def get_number_by_pro(number_list, pro_list):
 """
 :param number_list:数字列表
 :param pro_list:数字对应的概率列表
 :return:按概率从数字列表中抽取的数字
 """
 # 用均匀分布中的样本值来模拟概率
 x = random.uniform(0, 1)
 # 累积概率
 cum_pro = 0.0
 # 将可迭代对象打包成元组列表
 for number, number_pro in zip(number_list, pro_list):
 cum_pro += number_pro
 if x < cum_pro:
  # 返回值
  return number
 
 
# 主模块
if __name__ == "__main__":
 # 数字列表
 num_list = [1, 2, 3, 4, 5]
 # 对应的概率列表
 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1]
 # 函数调用
 n = get_number_by_pro(number_list=num_list, pro_list=pr_list)
 # 打印结果
 print(n)
 # 结果:1

3.2 按照指定概率从区间列表中的某个区间内生成随机数

给定一个区间列表和一个与之对应的概率列表,两个列表相应位置的元素组成的元组即表示某数字出现在某区间内的概率是多少,已知这些,我们如何生成随机数呢?这里我们通过两次使用均匀分布达到目的,代码如下:

import numpy as np
import random
 
 
# 定义从均匀分布中获取随机数的函数
def get_uniform_random_number(low, high):
 """
 :param low: 均匀分布的下界
 :param high: 均匀分布的上界
 :return: 从均匀分布中产生的随机数
 """
 # 均匀分布的随机数生成
 number = np.random.uniform(low, high)
 # 返回值
 return number
 
 
# 定义从一个数字列表中以一定的概率取出对应区间中数字的函数
def get_number_by_pro(number_list, pro_list):
 """
 :param number_list:数字列表
 :param pro_list:数字对应的概率列表
 :return:按概率从数字列表中抽取的数字
 """
 # 用均匀分布中的样本值来模拟概率
 x = random.uniform(0, 1)
 # 累积概率
 cum_pro = 0.0
 # 将可迭代对象打包成元组列表
 for number, number_pro in zip(number_list, pro_list):
 cum_pro += number_pro
 if x < cum_pro:
  # 从区间[number. number - 1]上随机抽取一个值
  num = get_uniform_random_number(number, number - 1)
  # 返回值
  return num
 
 
# 主模块
if __name__ == "__main__":
 # 数字列表
 num_list = [1, 2, 3, 4, 5]
 # 对应的概率列表
 pr_list = [0.1, 0.3, 0.1, 0.4, 0.1]
 # 函数调用
 n = get_number_by_pro(number_list=num_list, pro_list=pr_list)
 # 打印结果
 print(n)
 # 结果:3.49683787011193

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python多进程同步Lock、Semaphore、Event实例
Nov 21 Python
python批量提取word内信息
Aug 09 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
Python实现的排列组合计算操作示例
Oct 13 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
Mar 04 Python
Python在groupby分组后提取指定位置记录方法
Apr 20 Python
python使用epoll实现服务端的方法
Oct 16 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
python使用yield压平嵌套字典的超简单方法
Nov 02 Python
利用pytorch实现对CIFAR-10数据集的分类
Jan 14 Python
彻底解决Python包下载慢问题
Nov 15 Python
Pytorch中TensorBoard及torchsummary的使用详解
May 12 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 #Python
python中pygame安装过程(超级详细)
Aug 04 #Python
浅谈python图片处理Image和skimage的区别
Aug 04 #Python
Python下opencv图像阈值处理的使用笔记
Aug 04 #Python
python opencv 简单阈值算法的实现
Aug 04 #Python
Python pandas用法最全整理
Aug 04 #Python
python匿名函数用法实例分析
Aug 03 #Python
You might like
PHP模板引擎SMARTY
2006/10/09 PHP
一个用php实现的获取URL信息的类
2007/01/02 PHP
PHP简单系统查询模块代码打包下载
2008/06/07 PHP
PHP 日期时间函数的高级应用技巧
2009/10/10 PHP
PHP 转义使用详解
2013/07/15 PHP
php清除和销毁session的方法分析
2015/03/19 PHP
php注册登录系统简化版
2020/12/28 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
JavaScript具有类似Lambda表达式编程能力的代码(改进版)
2010/09/14 Javascript
ie浏览器使用js导出网页到excel并打印
2014/03/11 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
js判断手机号是否正确并返回的实现代码
2017/01/17 Javascript
js实现数组内数据的上移和下移的实例
2017/11/14 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
jQuery实现table表格信息的展开和缩小功能示例
2018/07/21 jQuery
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
vue实现侧边栏导航效果
2019/10/21 Javascript
举例介绍Python中的25个隐藏特性
2015/03/30 Python
python anaconda 安装 环境变量 升级 以及特殊库安装的方法
2017/06/21 Python
Python读取mat文件,并转为csv文件的实例
2018/07/04 Python
Python实现将Excel转换成为image的方法
2018/10/23 Python
Python中的字符串切片(截取字符串)的详解
2019/05/15 Python
python远程邮件控制电脑升级版
2019/05/23 Python
python/Matplotlib绘制复变函数图像教程
2019/11/21 Python
python3连接MySQL8.0的两种方式
2020/02/17 Python
Python logging日志库空间不足问题解决
2020/09/14 Python
html5如何及时更新缓存文件(js、css或图片)
2013/06/24 HTML / CSS
巴西化妆品商店:Lojas Rede
2019/07/26 全球购物
全球最大化妆品零售网站:SkinStore
2020/10/24 全球购物
将n个数按输入顺序的逆序排列,用函数实现
2012/11/14 面试题
thinkphp5 redis缓存新增方法实例讲解
2021/03/24 PHP
员工薪酬激励方案
2014/06/13 职场文书
关爱老人标语
2014/06/21 职场文书
乡镇党的群众路线教育实践活动剖析材料
2014/10/09 职场文书
2015年药品销售工作总结范文
2015/05/25 职场文书
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
2021/05/25 Python