使用python写一个正态分布的吉布斯采样
时间: 2023-09-11 09:12:05 浏览: 116
以下是使用Python实现正态分布的吉布斯采样的示例代码:
```python
import numpy as np
def gibbs_sampler(mu, sigma, num_samples, init_x):
"""
:param mu: 正态分布的均值
:param sigma: 正态分布的标准差
:param num_samples: 采样次数
:param init_x: 初始采样值
:return: 采样结果
"""
samples = np.zeros(num_samples)
x = init_x
for i in range(num_samples):
# 对于正态分布,p(y|x)也是正态分布
# 根据公式计算,即可得到y的条件分布
y = np.random.normal(mu, sigma / np.sqrt(2))
x = np.random.normal(y, sigma / np.sqrt(2))
samples[i] = x
return samples
# 示例
mu = 0
sigma = 1
num_samples = 10000
init_x = 0
samples = gibbs_sampler(mu, sigma, num_samples, init_x)
# 绘制采样结果的直方图
import matplotlib.pyplot as plt
plt.hist(samples, bins=50, density=True)
plt.show()
```
在以上示例代码中,我们使用了numpy库中的`np.random.normal()`函数来生成正态分布的随机数。在吉布斯采样中,我们需要先指定一个初始采样值,然后通过条件分布不断迭代生成新的采样值,最终得到一系列样本。最后,我们使用matplotlib库绘制了采样结果的直方图,可以看到采样结果近似于正态分布。
阅读全文