用python生成随机数的几种方法
在考虑由正态分布生成随机数时,首先要知道正态分布的均值和方差(标准差)。有了这些,我们可以调用python中现有的模块和函数来生成随机数。这里调用Numpy模块中的random.normal函数。由于非参数逻辑简单,所有直接粘贴代码如下:
Import numpy as np#定义函数def get _ normal _ Random _ number(LOC,Scale): """:paramloc:正态分布的均值:paramscale:正态分布的标准差:return:正态分布生成的随机数" " #正态分布生成的随机数= np.random.normal (loc = loc,Scale = scale) #返回值number #主模块if _ _ name _ _ = "_ _ main _ _": #函数调用n = get _ normal _ Random _ number(LOC = 2,scale = 2) #打印结果print (n) #结果
从给定参数的均匀分布中获得随机数的函数
在考虑从均匀分布获取随机数时,要事先知道均匀分布的上下界,然后调用Numpy模块的random.uniform函数生成随机数。
Import numpy as np#定义函数def get _ uniform _ Random _ number(low,High): """:paramlow:均匀分布的下界:paramhigh:均匀分布的上界:return:均匀分布生成的随机数" " #均匀分布生成的随机数= np.random.uniform (low,High)#返回值number #主模块if _ _ name _ _ = "_ _ main _ _": #函数调用n = get _ uniform _ Random _ number(low = 2,high = 4) #打印结果(n) #结果:2.44444
3按照指定的概率生成随机数。
有时候我们需要按照指定的概率产生随机数,比如知道盒子里每种颜色的球的比例,猜猜下次要拿出来的球的颜色。这里介绍的问题类似于上面的例子,需要给出一个概率列表,从列表对应的数列表或区间列表中生成随机数。分两部分讨论。
3.1按照指定的概率从号码列表中随机抽取号码。
假设给定一个数列表和一个对应的概率列表,两个列表对应位置的元素组成的元组表示该数出现在数列表中的可能性有多大,那么如何根据这些已知条件从数列表中提取随机数?这里我们考虑用均匀分布来模拟概率,代码如下:
Import numpy as npimport random#定义函数def get _ uniform _ Random _ number(low,High): """:paramlow:均匀分布的下界:paramhigh:均匀分布的上界:return:均匀分布生成的随机数" " #均匀分布生成的随机数= np.random.uniform (low,High)#返回值number #定义函数def get _ number _ by _ pro(number _ list, Pro _ list): "":paramnumber _ list:数字列表:parampro _ 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
3.2根据指定的概率从区间列表中的一个区间生成随机数。
给定一个区间列表和一个对应的概率列表,由两个列表中对应位置的元素组成的元组表示某个数出现在区间中的概率。给定这些,我们如何生成随机数?这里我们通过两次使用均匀分布来实现我们的目标,代码如下:
Import numpy as npimport random#定义函数def get _ uniform _ Random _ number(low,High): """:paramlow:均匀分布的下界:paramhigh:均匀分布的上界:return:均匀分布生成的随机数" " #均匀分布生成的随机数= np.random.uniform (low,High)#返回值number #定义函数def get _ number _ by _ pro(number _ list, Pro _ list): "":paramnumber _ list:数字列表:parampro _ 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