用python生成随机数的几种方法「建议收藏」

用python生成随机数的几种方法「建议收藏」今天学习了用python生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1从给定参数的正态分布中生成随机数当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为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://javaforall.net/185713.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 欧拉函数及其证明_欧拉函数证明题

    欧拉函数及其证明_欧拉函数证明题请思考以下问题:  任意给定正整数n,请问在小于等于n的正整数之中,有多少个与n构成互质关系?(比如,在1到8之中,有多少个数与8构成互质关系?)计算这个值的方法就叫做欧拉函数,以φ(n)表示。在1到8之中,与8形成互质关系的是1、3、5、7,所以φ(n)=4。φ(n)的计算方法并不复杂,但是为了得到最后那个公式,需要一步步讨论。第一种情况如果n=1,则φ(1

    2022年8月22日
    3
  • 再见VS Code,我用Fleet!

    再见VS Code,我用Fleet!大家好,我是辰哥~点击下方名片关注和星标『Python研究者』!????点击关注|设为星标|干货速递????来源Fleet官网:https://www.jetbrains.com/zh-cn/flee…

    2022年5月4日
    204
  • 微信开放平台开发第三方授权登陆(一):开发前期准备

    微信开放平台开发第三方授权登陆(一):开发前期准备据微信开放平台“开发资源”中网站应用微信登陆功能开发指南描述:进行授权登陆接入前,需要先注册一个开发者账号,并拥有一个已经审核通过的网站应用,并获取AppID和APPSecret,然后申请微信登陆并通过审核后,可以接入流程进行开发。据开发者资质认证处介绍:开发者资质认证通过后,微信开放平台帐号下的应用,将获得微信登录、智能接口、第三方平台开发等高级能力。所以在微信第三方授权登陆获取用户信息…

    2022年5月11日
    54
  • CentOS7下安装FTP服务

    CentOS7下安装FTP服务

    2021年10月19日
    34
  • 二小姐对群环域的理解

    二小姐对群环域的理解从本质上来看,群=非空集合+二元运算,群的定义主要包括四个方面:封闭性:二元运算的定义就可以满足这个性质 结合律:可以确保多个元素运算时得到唯一的结果,不受运算先后的影响,从而有(或na)的表达式 单位元:唯一 逆元:任意元素均有且唯一特殊的群为循环群;群举例:Z(加法);Zn(加法)明确了群的定义后,我们接着了解群的各类特殊子群的定义和性质:子群H=群G的子集合+二元运算…

    2022年6月21日
    19
  • Web后端基础知识[通俗易懂]

    Web后端基础知识[通俗易懂]文章目录前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas是基于NumPy的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):importnumpyasnpimportpandasaspdimportmatplotlib.pyplotaspltimportseabornassnsimportwarnings

    2022年6月16日
    29

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号