3. 利用舍选法生成n个来自gamma分布的随机数:
时间: 2024-09-26 21:17:43 浏览: 98
gengamrand(n,Alpha, Beta, a) :从广义伽马分布生成数字-matlab开发
舍选法,也叫 rejection sampling,是一种用于生成特定分布随机数的算法,特别是当直接计算概率密度函数比较困难时。对于Gamma分布,虽然有其累积分布函数(CDF),但是直接通过CDF生成均匀分布随机数然后反查CDF得到Gamma随机数可能效率不高。
以下是利用舍选法在Python中生成n个来自Gamma分布的随机数的一个基本步骤:
```python
import numpy as np
from scipy.stats import gamma
def generate_random_from_gamma(shape, scale, n, min_x=0, max_x=np.inf):
while True:
u = np.random.uniform(min_x, max_x, (n,))
v = np.random.gamma(shape, scale=scale)
accepted = u <= v
if np.all(accepted): # 如果所有都接受,则返回
return v[accepted]
else: # 否则继续尝试
max_x *= 2 # 调整最大值,增大舍弃范围
# 示例:生成1000个形状为2,尺度为0.5的Gamma分布随机数
shape = 2
scale = 0.5
n = 1000
gamma_rvs = generate_random_from_gamma(shape, scale, n)
```
这里,我们首先生成一个在[min_x, max_x]区间内的均匀随机数组u,然后对每个u值生成一个对应的Gamma分布随机数v。如果u小于等于v,就认为这次抽样被接受,否则将max_x翻倍并继续下一轮。这个过程会一直重复,直到满足条件的样本数达到n为止。
阅读全文