用Python实现5.随机生成符合正态分布的1000行3列的二维数组,设直方图的区域个数 为10,请分别统计数组所有值在不同直方图区域内的个数,绘制出每个区域内 数值个数所占比例的直方图,样式如图3所示。(直方图绘制)
时间: 2024-01-24 22:20:11 浏览: 74
可以使用numpy中的random模块生成符合正态分布的二维数组,然后使用matplotlib中的hist函数绘制直方图。
以下是代码实现:
```python
import numpy as np
import matplotlib.pyplot as plt
# 生成符合正态分布的二维数组
data = np.random.normal(size=(1000, 3))
# 统计每个值所在的直方图区域
hist, bins = np.histogram(data, bins=10)
# 计算每个区域内数值个数所占比例
hist_norm = hist / data.size
# 绘制直方图
plt.bar(bins[:-1], hist_norm, width=bins[1]-bins[0], align='edge')
plt.xlabel('Value')
plt.ylabel('Percentage')
plt.title('Histogram of Normal Distribution')
plt.show()
```
运行结果如下图所示:
![直方图](https://img-blog.csdnimg.cn/20210813173523425.png)
相关问题
正态分布 python
### 使用 Python 实现正态分布
#### NumPy 的 `random` 模块用于高效生成一维正态分布随机数
对于高效的单变量正态分布随机数生成,可以利用NumPy库中的`normal()`函数。此方法不仅简单易用而且性能优越,相较于Python自带的`random`模块,在速度上有着显著提升。
```python
import numpy as np
mu, sigma = 0, 0.1 # 均值μ和标准差σ
s = np.random.normal(mu, sigma, 1000) # 创建具有指定均值和方差的一千个样本点
```
[^1]
#### 多元正态分布数据的构建方式
当涉及到多维度的数据集时,可以通过定义期望向量以及协方差矩阵来模拟更加复杂的场景。下面的例子展示了如何基于给定参数创建二维空间内的正态分布实例:
```python
import numpy as np
mean_vector = np.array([0., 100.])
covariance_matrix = [[1, 0],
[0, 1]]
data_points = np.random.multivariate_normal(mean_vector, covariance_matrix, 500).T
```
[^2]
#### 绘制正态分布图形化表示
为了直观展示所生成的数据特性,可借助Matplotlib库绘制直方图或其他类型的图表来进行可视化分析。这有助于理解数据的整体趋势及其离散程度。
```python
from matplotlib import pyplot as plt
plt.hist(s, bins=30, density=True)
plt.title('Histogram of Normal Distribution')
plt.show()
```
[^5]
python 绘制三维统计直方图的代码
这里提供一个使用 Matplotlib 库绘制三维统计直方图的示例代码:
```python
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 生成随机数据
x = np.random.normal(0, 1, 1000)
y = np.random.normal(0, 1, 1000)
z = np.random.normal(0, 1, 1000)
# 绘制三维统计直方图
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
hist, xedges, yedges = np.histogram2d(x, y, bins=10)
xpos, ypos = np.meshgrid(xedges[:-1] + 0.25, yedges[:-1] + 0.25, indexing="ij")
xpos = xpos.ravel()
ypos = ypos.ravel()
zpos = 0
dx = dy = 0.5 * np.ones_like(zpos)
dz = hist.ravel()
ax.bar3d(xpos, ypos, zpos, dx, dy, dz, color='b', zsort='average')
# 设置坐标轴标签
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')
# 显示图形
plt.show()
```
上述代码中,我们生成了 1000 个服从正态分布的随机数据,并使用 `histogram2d` 函数计算了 x 和 y 坐标轴上的二维直方图。然后,我们将直方图数据传递给 `bar3d` 函数,绘制三维直方图。最后,我们设置了坐标轴标签,并显示了图形。
阅读全文