Python Numpy如何从非均匀分布中抽样随机数?
我一直在学习随机抽样方法,我知道Numpy使用Mersenne Twister生成均匀随机数,然后它如何传递这些来生成非均匀分布 例如:Python Numpy如何从非均匀分布中抽样随机数?,python,numpy,random,distribution,sampling,Python,Numpy,Random,Distribution,Sampling,我一直在学习随机抽样方法,我知道Numpy使用Mersenne Twister生成均匀随机数,然后它如何传递这些来生成非均匀分布 例如: np.random.normal(mu,sigma,n) 这里使用什么算法对正态分布的数字进行采样?谢谢。你的问题太宽泛了,它可能(而且确实)会填补你的空白 这就是说,一个非常快速的概述是,生成非均匀随机数的技术属于几个常见的类别。这些措施包括: 累积分布函数(CDF)的逆变换 卷积(随机变量的和本身是随机的 具有不同分布的变量) 合成(分解a 使用条件分布
np.random.normal(mu,sigma,n)
这里使用什么算法对正态分布的数字进行采样?谢谢。你的问题太宽泛了,它可能(而且确实)会填补你的空白 这就是说,一个非常快速的概述是,生成非均匀随机数的技术属于几个常见的类别。这些措施包括:
最快的方法是基于,它将法线分解为层(合成),对某些层使用特殊关系,并使用接受/拒绝来处理层的尾部。可能的相关部分(当前)问题的源代码不一定是生成正常随机数的算法,而是NumPy使用什么算法生成这样的数。由于向后兼容,NumPy的
NumPy.random.normal
算法多年来没有改变,但将来可能不会改变(见新版本)。@PeterO。关键是NumPy必须使用一种或多种基本技术,对于法线,它使用Marsaglia的极坐标方法(如答案中所述)。这个问题特别问“…它如何通过这些来生成非均匀分布?”然后是“例如”的正态分布。我解释为想知道所涉及的技术。如果不是的话,没有一个单一的答案可以涵盖NumPy提供的整个RV系列,您最好的选择是查看所有这些版本的来源。这个问题对SO来说太宽泛了。重读这个问题,我发现它适用于所有由NumPy支持的“非均匀分布”,而不仅仅是正态分布。在这种情况下,NumPy源代码是记录它们的最佳方式。