用Python实现从一维高斯分布产生N个随机数,绘制直方图和概率
时间: 2024-06-01 14:01:19 浏览: 12
密度函数曲线。
```python
import numpy as np
import matplotlib.pyplot as plt
# 产生N个服从一维高斯分布的随机数
N = 10000
mu = 0 # 均值
sigma = 1 # 标准差
data = np.random.normal(mu, sigma, N)
# 绘制直方图
plt.hist(data, bins=50, density=True, alpha=0.7, color='blue')
# 绘制概率密度函数曲线
x = np.linspace(-5, 5, 100)
y = 1 / (np.sqrt(2 * np.pi) * sigma) * np.exp(-((x - mu) / sigma) ** 2 / 2)
plt.plot(x, y, color='red')
plt.show()
```
运行结果:
![高斯分布直方图和概率密度函数](https://cdn.jsdelivr.net/gh/Andrewyrk/PicBed/Pic/2022/1/20220118151513.png)
相关问题
写一个程序,从一维高斯分布N(μ,σ^2)中产生n个随机数,绘制数据的直方图和概率密度函数,分析说明直方图和概率密度函数的关系。
这是一个很有意思的问题!可以使用Python的NumPy和Matplotlib库来实现。
首先,需要使用NumPy库中的random模块生成n个服从高斯分布的随机数。代码如下:
```python
import numpy as np
n = 1000 # 产生1000个随机数
mu, sigma = 0, 0.1 # 均值μ为0,标准差σ为0.1
s = np.random.normal(mu, sigma, n) # 产生n个随机数,服从N(μ,σ^2)分布
```
接下来,使用Matplotlib库中的hist函数绘制数据的直方图,使用NumPy库中的linspace函数生成一组横坐标,然后使用Matplotlib库中的plot函数绘制高斯分布的概率密度函数。代码如下:
```python
import matplotlib.pyplot as plt
count, bins, ignored = plt.hist(s, 30, density=True) # 产生直方图
x = np.linspace(mu - 3 * sigma, mu + 3 * sigma, 100)
pdf = 1 / (sigma * np.sqrt(2 * np.pi)) * np.exp(-(x - mu) ** 2 / (2 * sigma ** 2)) # 产生概率密度函数
plt.plot(x, pdf, linewidth=2, color='r') # 绘制概率密度函数
plt.show() # 显示图像
```
直方图和概率密度函数的关系是:直方图展示了数据的频率分布情况,而概率密度函数则是描述了这一分布的数学模型。同时,从图像可以看出,直方图和概率密度函数是很相似的,因为它们都反映了随机数在高斯分布中的分布情况。
写一个程序,从二维高斯分布N(μ,Σ)中产生n个随机数,绘制数据的散布图和等密度点分布轨迹。
好的,这是一个统计学的问题,我可以回答。您可以使用Python的numpy和matplotlib库来实现。首先使用numpy的random.multivariate_normal方法生成n个随机数,然后使用matplotlib的scatter方法绘制散布图。使用numpy的linalg.eig方法计算协方差矩阵的特征值和特征向量,进而绘制等密度点分布轨迹。下面是Python代码示例:
```python
import numpy as np
import matplotlib.pyplot as plt
# 定义参数
n = 1000
mu = np.array([1, 2])
sigma = np.array([[2, 1], [1, 2]])
# 生成随机数
r = np.random.multivariate_normal(mu, sigma, n)
# 绘制散布图
plt.scatter(r[:, 0], r[:, 1], s=2, alpha=0.3)
# 计算特征值和特征向量
eig_vals, eig_vecs = np.linalg.eig(sigma)
# 计算等密度点分布轨迹
theta = np.linspace(0, 2*np.pi, 100)
x = np.sqrt(eig_vals[0]) * np.cos(theta)
y = np.sqrt(eig_vals[1]) * np.sin(theta)
xy = np.vstack((x, y)).T.dot(eig_vecs.T) + mu
# 绘制等密度点分布轨迹
plt.plot(xy[:, 0], xy[:, 1], c='r', linewidth=2)
plt.axis('equal')
plt.show()
```
希望这可以帮助您解决问题。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)