1从给定查参数的正态分布中生成随机数
当考虑从正态分布中生成随机数时360问答,应当首先知道正态分布的均值和段防食承质去实担方差(标准差),有了这些,就可以调用python中现有的模块和函数来生成随机数殖服广界球则率得甚做求了。这里调用了Numpy模块中的rando交胡m.normal函数,由于逻辑非参简单,所有直接贴上代码如下:
im础着乡实心附围鲜portnumpyasnp#定义从正态分布中获取随机数的函数defget_normal_ra己玉掉是ndom_number(loc,scale): """ :paramloc:正态分布的均值 :paramscale:正态分布的标准差 :return:从正态分布中产生补起米首由七效师道的随机数 """ #正态分社大阻系政益西齐距点劳布中的随机数生成 number=np.random.normal(loc=loc,scale=scale) #返回值 returnnumber#主模块if家热铁呀皮座同村义声故__name__=="__main__": #函数调用 n=get_normal_random_number(loc=2,scale=2底线约图) #打印结果 pri倒价看限补本设香行排任nt(n) #结果:3.275192443463058
2从给定参数的均匀分布中获取随益机数的函数
考虑从均匀分布中获取紧冷随机数的时候,要事先知道均匀分布的下界和上界,然后调用Numpy模块的random.uniform函数生成随机数。
importnumpyasnp#定义从均匀分布中获取随机数的函数defget_uniform_random_会number(low,high): """ :paramlow:均匀分布的下界 :既似paramhigh:均匀分布的上界 :return:从均匀分布中产生的随机数 """ #民均匀分布的随机数生成 number=np.random.uniform(low,high) #返回值 returnnumber#主模块if__name__=="__main__": #函数调用 n=get_uniform_random_number(low=2,high=4) #打印结果 print(n) #结果:2.4462417140153114
3按照指定概率生成随机数
有时候我们需要按照指定森侍慎的概率生成随机数,比如已知盒子中每种颜色的球的比例,猜测下一次取出的球的颜色。在这里介绍的问题和上面的例子相似,要求给定一个概率列表,从列表对应的数字列表或区间列表中生成随机数,分两部分讨论。
3.1按照指定概率从数字列表中随机抽取数字
假设给定一个数字列表和一个与之对应的概率列表,两个列表对应位置的元素组成的元组即表示该数字在数字列表中以多大的概率出现,那么如何根据这些已知条件从数字列表中按概率抽取随机数呢?在这里我们考虑用均谈伍匀分布来模拟概率,代码如下:
importnumpyasnpimportrandom#定义从均匀分布中获取随机数的函数defget_uniform_random_number(low,high): """ :paramlow:均匀分布的下界 :paramhigh:均匀分布的上界 :return:从均匀分布中产生的随机数 """ #均此敬匀分布的随机数生成 number=np.random.uniform(low,high) #返回值 returnnumber#定义从一个数字列表中以一定的概率取出对应区间中数字的函数defget_number_by_pro(number_list,pro_list): """ :paramnumber_list:数字列表 :parampro_list:数字对应的概率列表 :return:按概率从数字列表中抽取的数字 """ #用均匀分布中的样本值来模拟概率 x=random.uniform(0,1) #累积概率 cum_pro=0.0 #将可迭代对象打包成元组列表 fornumber,number_proinzip(number_list,pro_list): cum_pro+=number_pro ifx<cum_pro: #返回值 returnnumber#主模块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按照指定概率从区间列表中的某个区间内生成随机数
给定一个区间列表和一个与之对应的概率列表,两个列表相应位置的元素组成的元组即表示某数字出现在某区间内的概率是多少,已知这些,我们如何生成随机数呢?这里我们通过两次使用均匀分布达到目的,代码如下:
importnumpyasnpimportrandom#定义从均匀分布中获取随机数的函数defget_uniform_random_number(low,high): """ :paramlow:均匀分布的下界 :paramhigh:均匀分布的上界 :return:从均匀分布中产生的随机数 """ #均匀分布的随机数生成 number=np.random.uniform(low,high) #返回值 returnnumber#定义从一个数字列表中以一定的概率取出对应区间中数字的函数defget_number_by_pro(number_list,pro_list): """ :paramnumber_list:数字列表 :parampro_list:数字对应的概率列表 :return:按概率从数字列表中抽取的数字 """ #用均匀分布中的样本值来模拟概率 x=random.uniform(0,1) #累积概率 cum_pro=0.0 #将可迭代对象打包成元组列表 fornumber,number_proinzip(number_list,pro_list): cum_pro+=number_pro ifx<cum_pro: #从区间[number.number-1]上随机抽取一个值 num=get_uniform_random_number(number,number-1) #返回值 returnnum#主模块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,型控,黄量