首页 / 知识
关于算法:将均匀分布转换为正态分布
2023-04-16 03:14:00
Converting a Uniform Distribution to a Normal Distribution如何将均匀分布(如大多数随机数发生器产生的,例如0.0到1.0之间)转换为正态分布? 如果我想要选择均值和标准差怎么办? Ziggurat算法对此非常有效,尽管Box-Muller变换更容易从头开始实现(而不是疯狂慢)。 有很多方法:
将任何函数的分布更改为另一个函数都涉及使用所需函数的逆函数。 换句话说,如果您针对特定的概率函数p(x),则可以通过对其积分-> d(x)=积分(p(x))并使用其反函数来获得分布:Inv(d(x)) 。现在使用随机概率函数(具有均匀分布)并通过函数Inv(d(x))转换结果值。您应该根据选择的功能获得带有分布的随机值。 这是通用的数学方法-通过使用它,您现在可以选择具有逆或良好逆近似的任何概率或分布函数。 希望这对您有所帮助,并感谢您对使用分布的简短评论,而不是概率本身。 这是使用Box-Muller变换的极坐标形式的javascript实现。
使用中央极限定理Wikipedia条目mathworld条目可发挥您的优势。
生成n个均匀分布的数字,将它们相加,减去n * 0.5,您将得到近似正态分布的输出,均值等于0,方差等于 n = 10可以使您快得快一半。如果您想要的东西超过一半,请寻求轮胎解决方案(正态分布在Wikipedia条目中已指出) 我会使用Box-Muller。关于以下两点: 通常,您缓存一个值,然后返回另一个值。在下一次调用样本时,您返回缓存的值。 然后,您必须按标准偏差缩放Z分数,并添加均值以获得正态分布中的完整值。 其中R1,R2是随机统一数字: 正态分布,SD为1:sqrt(-2 * log(R1))* cos(2 * pi * R2) 这是正确的……不需要执行所有这些慢循环! 八年后我可以添加一些东西似乎令人难以置信,但是对于Java,我想向读者介绍Random.nextGaussian()方法,该方法为您生成均值0.0和标准差1.0的高斯分布。 简单的加法和/或乘法将改变均值和标准差,以满足您的需求。 标准的Python库模块random具有您想要的:
对于算法本身,请查看Python库中random.py中的函数。 手动输入在这里 问:如何将均匀分布(如大多数随机数生成器产生的,例如0.0到1.0之间)转换为正态分布? 对于软件实现,我知道几个随机生成器名称,这些名称在[0,1]中为您提供了伪统一的随机序列(Mersenne Twister,线性一致生成器)。我们称它为U(x)
存在于数学领域中称为概率论。 当F ^ -1可以无问题地解析得出时,第2步可适用于生成r.v.?F,而无需使用任何计数方法。 (例如exp.distribution) 为了建模正态分布,您可以计算y1 * cos(y2),其中y1?[2pi]是均匀的。 y2是相对分布。 问:如果我要选择平均值和标准差怎么办? 您可以计算sigma * N(0,1)+ m。 可以证明,这种移位和缩放导致N(m,sigma)
我想您应该在EXCEL:
例如: 使用实现的函数rnorm()也比创建正态分布的随机数生成器要快,因为它比写随机数生成器要快。参见以下代码作为证明
这是使用Box-Muller变换的极坐标形式的Matlab实现:
功能
并调用 显然,与Matlab内置randn相比,它确实效率很低。 我有以下代码可能会有所帮助:
近似:
参见http://www.protonfish.com/random.shtml |
最新内容
相关内容
防篡改算法linux命令?
防篡改算法linux命令?,技术,网络,系统,数据,区块链,电子,交易,信息,网站,国际,编程高手来啊!!!急啊!!!在你的倒数第5两行中间插入一行:Call Dealinux的随机数命令?
linux的随机数命令?,时间,名字,数字,系统,数据,首次,设备,电脑,名称,文件,linux中,C语言for语句中的随机数种子。首先告诉你随机数种子是什么linux数据库选择命令?
linux数据库选择命令?,系统,地址,工作,软件,管理,信息,工具,基础,命令,服务,操作系统常用命令和linux常用命令怎么学首先打开linux操作系统在学编程为什么选择Python
学编程为什么选择Python,数据,人工智能,标准,代码,发展,工资,占比,项目,待遇,培训,人工智能的飞速发展推动使用Python编程语言的人越来越多,Pypython如何选择Python中的IDE?
python如何选择Python中的IDE?,工具,代码,平台,通用,培训,实时,最新,智能,工作,环境,在写Python代码时,最好的方式就是使用集成开发环境了,也就Python3实现旋转数组的3种算法
Python3实现旋转数组的3种算法,位置,代码,时间,培训,算法,数组,解法,结果,长度,索引,下面是Python3实现的旋转数组的3种算法。一、题目给定一报名Python培训选择哪种方式比较好
报名Python培训选择哪种方式比较好?,培训,工作,基础,时间,情况,在线,最划算,环境,系统,方式,Python不仅是一种高级的编程语言,而且还是一种应用Python算法是什么?有哪几类?
Python算法是什么?有哪几类?,数据,数字,时间,算法,系统,策略,位置,有限,标准,培训,了解Python的人应该都听说过Python算法,但是它们的类型和定义为什么要选择python?
为什么要选择python?,代码,工作,概念,设备,数据,宏观,年度,人工智能,教育,科技,作为新手,在面对广泛应用于企业级应用开发的Java、游戏客户端选择python与不选择的理由
选择python与不选择的理由,分析,系统,市场,时间,业务,培训,代码,语言,程序,解释性,为什么选择Python(优势)·Python是当前最流行的语言,因为它Python中选择结构是什么
Python中选择结构是什么,培训,语句,分支,结构,表达式,条件,以上,顺序,实例,逻辑,1、Python选择结构通过判断条件是否成立来决定分支的执行。2机器学习选择python的原因
机器学习选择python的原因,时间,生态,数据,平台,发展,系统,市场份额,大幅,设计,灵活,Python程序语言与机器学习实践可以称得上是“珠联璧合”