擅长:python、mysql、java
<p>一般来说,你需要一个逆累积概率密度函数。一旦有了它,就可以简单地沿分布生成随机数:</p>
<pre><code>import random
def sample(n):
return [ icdf(random.random()) for _ in range(n) ]
</code></pre>
<p>或者,如果使用NumPy:</p>
<pre><code>import numpy as np
def sample(n):
return icdf(np.random.random(n))
</code></pre>
<p>在这两种情况下,<code>icdf</code>是反向累积分布函数,它接受0到1之间的值,并从分布中输出相应的值。</p>
<p>为了说明<code>icdf</code>的性质,我们将以值10和12之间的简单均匀分布为例:</p>
<ul>
<li><p>概率分布函数在10到12之间为0.5,其他地方为零</p></li>
<li><p>累积分布函数为0小于10(10以下无样本),1大于12(12以上无样本),且在值之间线性增加(PDF的整数)</p></li>
<li><p>反向累积分布函数仅定义在0和1之间。在0时为10,在12时为1,并且在值之间线性变化</p></li>
</ul>
<p>当然,最困难的部分是求逆累积密度函数。它实际上取决于你的分布,有时你可能有一个分析函数,有时你可能想诉诸插值。数值方法可能是有用的,因为数值积分可用于创建CDF,插值可用于反转CDF。</p>