本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为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生成仿真数据的一些基本方法和技巧,写成博客和大家分享一下。 本篇博客主要讲解如何从给定参数的的正态分布/均匀分布中生成随机数以及如何以给定概率从数字列表抽取某数字或从区间列表的某一区间内生成随机数,按照内容将博客分为3部分,并附上代码。1 从给定参数的正态分布中生成随机数 当考虑从正态分布中生成随机数时,应当首先知道正态分布的均值和方差(标准差),有了这些,... numpy.random.randint(low, high=None, size=None, dtype='l') 函数作用:返回一个随机整型数或 随机数 数组,范围从低(闭)到高(开),即[low, high)。 如果没有写参数high的值,则返回[0,low)的值。 参数如下: low: int 生成的数值最低要大于等于low。 (hign = None时,生成的数值要在[0, l
生成随机数 是程序设计里常见的需求。一般的编程语言都会自带一个 随机数生成 函 数,用于生成服从均匀分布的 随机数 。不过有时需要生成服从其它分布的 随机数 ,例 如高斯分布或指数分布等。有些编程语言已经有比较完善的实现,例如 Python 的 NumPy。这篇文章介绍如何通过均匀分布 随机数生成 函数生成符合特定 概率 分布的随 机数,主要介绍Inverse Ttransform和Acceptance­Rejection两种基础算法以及一些相 关的衍生 方法 。下文我们均假设已经拥有一个可以生成0到1之间均匀分布的 随机数 生 成函数,关于如何生成均匀分布等更底层的 随机数生成 理论,请参考其它资料,本文 不做讨论。
一. Python 自带的random库 1.参生n–m范围内的一个 随机数 : random.randint(n,m) 2.产生0到1之间的浮点数: random.random() 3.产生n---m之间的浮点数: random.uniform(1.1,5.4) 4.产生从n---m间隔为k的整数: random.randrange(n,m,k) 5.从序列中随机选取一个元素: random.choice([1, 2, 3, 4, 5, 6, 7
利用 python 生成随机数 (指定 随机数 范围以及 随机数 小数位数) 这是一个悲惨的故事,相信大家经历过向数据库里面补录数据的经历不,任务是非常的简单呀,但是吧工作量大呀,比如小编有一次进行数据补录,居然有2万多条的记录需要补录,规定时间是下午4点之前补录完毕,看看手上已经快14点的时间 但是对于小编来说这些时间已经足以,哈哈哈,非常抱歉哈,由于一些原因,不方便和大家分享这个 python 工具,请大家见谅,这里咱只讲 生成随机数 先看效果图 小编这个录入程序的几点需求 有当前日期的限制,也就是每一条记录里面
random.random() 返回 随机生成 的一个实数,它在[0,1)范围内 random.randint(a,b) 返回随机整数,范围a~b random.randrange(a,b) 随机生成 a~b-1的数字,不包括b random.choice([' Python ', 'R', 'C++'],k=2) 随机抽取字符串,个数为k random.sample(‘hello’,2) 在多个字符...
1. 编写一个 Python 程序,计算某个数的阶乘。 2. 编写一个 Python 程序,判断一个字符串是否为回文字符串(即反转字符串后是否与原字符串相同)。 3. 编写一个 Python 程序,输入一个正整数n,输出n以内所有的素数。 4. 编写一个 Python 程序,实现简单的加密和解密算法。加密算法将给定的字符串中每个字符的ASCII码增加1,而解密算法则将每个字符的ASCII码减去1。 5. 编写一个 Python 程序,实现一个简单的计算器,支持加、减、乘、除四种运算。可以提示用户输入运算符和要进行运算的两个数。 6. 编写一个 Python 程序,读入一个文本文件,输出其中出现次数最多的单词及其出现次数。 7. 编写一个 Python 程序,通过爬虫抓取指定网站上的图片并下载到本地。 8. 编写一个 Python 程序,读入一个文本文件,统计其中每个单词出现的次数,并按照出现次数从大到小排序输出。 9. 编写一个 Python 程序,生成一个 随机数 ,并提示用户猜测这个 随机数 是多少,大于还是小于程序生成的数。 10. 编写一个 Python 程序,输入一个英文句子,将其中的每一个单词首字母大写并输出。