详解用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 相关文章推荐
python3设计模式之简单工厂模式
Oct 17 Python
python+matplotlib实现动态绘制图片实例代码(交互式绘图)
Jan 20 Python
Django中间件实现拦截器的方法
Jun 01 Python
Django用户认证系统 User对象解析
Aug 02 Python
基于python+selenium的二次封装的实现
Jan 06 Python
Matplotlib绘制雷达图和三维图的示例代码
Jan 07 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
Jan 20 Python
在Keras中利用np.random.shuffle()打乱数据集实例
Jun 15 Python
Tensorflow全局设置可见GPU编号操作
Jun 30 Python
python中sys模块是做什么用的
Aug 16 Python
Python3+selenium配置常见报错解决方案
Aug 28 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
Sep 17 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
WordPress中调试缩略图的相关PHP函数使用解析
2016/01/07 PHP
PHP模版引擎原理、定义与用法实例
2019/03/29 PHP
php和asp语法上的区别总结
2019/05/12 PHP
js常见表单应用技巧
2008/01/09 Javascript
解析js如何获取当前url中的参数值并复制给input
2013/06/23 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
2014/01/26 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
JS实现将数字金额转换为大写人民币汉字的方法
2016/08/02 Javascript
Js获取当前日期时间及格式化代码
2016/09/17 Javascript
JavaScript BASE64算法实现(完美解决中文乱码)
2017/01/10 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
JavaScript反弹动画效果的实现代码
2017/07/13 Javascript
基于Vue的ajax公共方法(详解)
2018/01/20 Javascript
Webpack devServer中的 proxy 实现跨域的解决
2018/06/15 Javascript
React注册倒计时功能的实现
2018/09/06 Javascript
vue-cli3 karma单元测试的实现
2019/01/18 Javascript
vue.js指令v-for使用以及下标索引的获取
2019/01/31 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
微信小程序实现拍照画布指定区域生成图片
2019/07/18 Javascript
jQuery实现简单弹幕效果
2019/11/28 jQuery
Python入门_浅谈数据结构的4种基本类型
2017/05/16 Python
Python框架Flask的基本数据库操作方法分析
2018/07/13 Python
Python中的单下划线和双下划线使用场景详解
2019/09/09 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Python通过队列来实现进程间通信的示例
2020/10/14 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
前端隐藏出边界内容的实现方法
2016/04/14 HTML / CSS
《藤野先生》教学反思
2014/02/19 职场文书
2014年财务工作总结范文
2014/11/11 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
合同纠纷调解书
2015/05/20 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
2016年暑期教师培训心得体会
2016/01/09 职场文书
喜迎建国70周年:有关爱国的名言名句
2019/09/24 职场文书
南阳市白酒市场的调查报告
2019/11/08 职场文书
MySQ InnoDB和MyISAM存储引擎介绍
2022/04/26 MySQL