详解用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 如何访问外围作用域中的变量
Sep 11 Python
解决Python requests 报错方法集锦
Mar 19 Python
python实现抖音视频批量下载
Jun 20 Python
python简单实现矩阵的乘,加,转置和逆运算示例
Jul 10 Python
使用pycharm在本地开发并实时同步到服务器
Aug 02 Python
Python数据可视化实现正态分布(高斯分布)
Aug 21 Python
pycharm实现在虚拟环境中引入别人的项目
Mar 09 Python
Python生成器实现简单&quot;生产者消费者&quot;模型代码实例
Mar 27 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
在keras中对单一输入图像进行预测并返回预测结果操作
Jul 09 Python
Python中Pyspider爬虫框架的基本使用详解
Jan 27 Python
python必学知识之文件操作(建议收藏)
May 30 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环境搭建最新方法
2006/09/05 PHP
example1.php
2006/10/09 PHP
PHP5.3的垃圾回收机制(动态存储分配方案)深入理解
2012/12/10 PHP
PHP实现多图片上传类实例
2014/07/26 PHP
Yii框架中memcache用法实例
2014/12/03 PHP
php二维数组按某个键值排序的实例讲解
2019/02/15 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
$.get获取一个文件的内容示例代码
2013/09/11 Javascript
node.js操作mongodb学习小结
2015/04/25 Javascript
浅析javascript的return语句
2015/12/15 Javascript
JavaScript中的this使用详解
2016/07/27 Javascript
JavaScript蒙板(model)功能的简单实现代码
2016/08/04 Javascript
关于JavaScript中事件绑定的方法总结
2016/10/26 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
在 Angular 中实现搜索关键字高亮示例
2017/03/21 Javascript
利用express启动一个server服务的方法
2017/09/17 Javascript
浅谈Vue页面级缓存解决方案feb-alive(上)
2019/04/14 Javascript
微信小程序学习总结(三)条件、模板、文件引用实例分析
2020/06/04 Javascript
如何在 Vue 中使用 JSX
2021/02/14 Vue.js
[03:14]2014DOTA2西雅图国际邀请赛 EG战队巡礼
2014/07/07 DOTA
python爬虫入门教程之糗百图片爬虫代码分享
2014/09/02 Python
实例讲解Python编程中@property装饰器的用法
2016/06/20 Python
Python中的单继承与多继承实例分析
2018/05/10 Python
Python实现检测文件的MD5值来查找重复文件案例
2020/03/12 Python
Python reduce函数作用及实例解析
2020/05/08 Python
使用matplotlib的pyplot模块绘图的实现示例
2020/07/12 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
企业业务员岗位职责
2014/03/14 职场文书
劳资协议书范本
2014/04/23 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
警察群众路线对照检查材料思想汇报
2014/10/01 职场文书
基层党员群众路线教育实践活动个人对照检查材料思想汇报
2014/10/05 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL