详解用python生成随机数的几种方法
作者:tsz_upUP 发布时间:2022-01-24 14:17:42
今天学习了用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
来源:https://blog.csdn.net/tszupup/article/details/81036877
猜你喜欢
- 安装SQL Server2019详细教程1、官网下载SQL Server 2019 Developer: Developer下载地址&nbs
- 外部数据导入导入excel文件pandas导入excel用read_excel()方法:import pandas as pdexcel_f
- loc和iloc的意思首先,loc是location的意思,和iloc中i的意思是指integer,所以它只接受整数作为参数,详情见下面。l
- 使用标准库importlib的import_module()函数、django的import_string(),它们都可以动态加载指定的 P
- 主要记录一下:图片验证码1.获取登录界面的图片2.获取验证码位置3.在登录页面截取验证码保存4.调用百度api识别(目前准确率较高的识别图片
- 听说最近流行JQ风格的语法,不流行EXT风格了一.//ajax类fw=window.fw||{};fw.ajax = { &nbs
- Oracle是目前应用最广泛的数据库系统。一个完整的数据库系统包括系统硬件、操作系统、网络层、DBMS(数据库管理系统)、应用程序与数据,各
- 这个坐标轴变名用法,我真服气了,我在网上看大家写的教程,看的头晕,也没看懂他们写xtick到底怎么用的,最后找到官方教程,看了一个例子,ov
- 不管何时何地,只要我们编程时遇到了跟时间有关的问题,都要想到 datetime 和 time 标准库模块,今天我们就用它内部的方法,详解py
- 版本 0.9来自 http://onewww.net说明:当焦点不在表格内的input时,回车键复制最后一行,delete删除键最后一行选择
- 1. 常用模块# 连接数据库connect()函数创建一个新的数据库连接对话并返回一个新的连接实例对象PG_CONF_123 = {
- 直接调用系统的颜色显示在网页上本来是件很好玩滴事,但是,也有个缺点,就是可用的色太少 比如Bindows在它的启动画面一点点应用。=。= 上
- 基本使用import unittestclass Testcase(unittest.TestCase): @classmeth
- 先给大家介绍下Python 字符串前面加u,r,b,f的含义(字符串前缀)1、字符串前加 u例:u"我是含有中文字符组成的字符串。
- 前言许多 Go 初学者在方法 * 的选择上可能会感到困惑,不知道该选择值 * 还是指针 * 。本文将会对方法 * 进行介
- 要求安装:1.Python2.7z解压软件backup_2.py# Filename: backup_2.py'''
- 有时候,我们需要检测一个元素是否已经存在列表中,并且不区分大小写,如:列表已有元素Mary,那我们想认为MARY也已经被占用。这个例子在实际
- 先介绍下什么是协程:协程,又称微线程,纤程,英文名Coroutine。协程的作用,是在执行函数A时,可以随时中断,去执行函数B,然后中断继续
- 本文是对《Python Qt GUI快速编程》的第9章的堆叠窗口例子Vehicle Rental用Python3+PyQt5+Qt Desi
- 本文学习如何在Golang程序中执行Shell命令(如,ls,mkdir或grep),如何通过stdin和stdout传入I/O给正在运行的