简介
本实验使用 Python Matplotlib 探索多元正态分布上的各种归一化方法。在本实验中,你将学习线性归一化、幂律归一化,以及如何使用 Matplotlib 可视化多元正态分布。
虚拟机使用提示
虚拟机启动完成后,点击左上角切换到“笔记本”标签页,以访问 Jupyter Notebook 进行练习。
有时,你可能需要等待几秒钟让 Jupyter Notebook 完成加载。由于 Jupyter Notebook 的限制,操作验证无法自动化。
如果你在学习过程中遇到问题,随时向 Labby 提问。课程结束后提供反馈,我们会及时为你解决问题。
导入库
在这一步中,你需要从 NumPy.random 中导入必要的库,即 Matplotlib、NumPy 和 Multivariate_normal。
import matplotlib.pyplot as plt
import numpy as np
from numpy.random import multivariate_normal
设置随机状态
在这一步中,你需要设置随机状态以确保可重复性。
np.random.seed(19680801)
创建数据
在这一步中,你需要使用 multivariate_normal() 创建数据。此函数从多元正态分布中生成一个随机样本。
data = np.vstack([
multivariate_normal([10, 10], [[3, 2], [2, 3]], size=100000),
multivariate_normal([30, 20], [[3, 1], [1, 3]], size=1000)
])
创建直方图
在这一步中,你需要使用 hist2d() 创建一个直方图。hist2d() 函数用于创建二维直方图。
plt.hist2d(data[:, 0], data[:, 1], bins=100)
创建幂律归一化
在这一步中,你需要使用 PowerNorm() 创建幂律归一化。
plt.hist2d(data[:, 0], data[:, 1], bins=100, norm=mcolors.PowerNorm(gamma))
创建子图
在这一步中,你需要使用 subplots() 创建子图。
fig, axs = plt.subplots(nrows=2, ncols=2)
创建线性归一化
在这一步中,你需要创建线性归一化。
axs[0, 0].hist2d(data[:, 0], data[:, 1], bins=100)
创建幂律归一化
在这一步中,你需要使用不同的伽马值创建幂律归一化。
for ax, gamma in zip(axs.flat[1:], gammas):
ax.hist2d(data[:, 0], data[:, 1], bins=100, norm=mcolors.PowerNorm(gamma))
设置标题
在这一步中,你需要为每个图表设置标题。
axs[0, 0].set_title('线性归一化')
for ax, gamma in zip(axs.flat[1:], gammas):
ax.set_title(r'幂律 ($\gamma = %1.1f$)' % gamma)
紧凑布局
在这一步中,你需要调整子图之间的间距。
fig.tight_layout()
显示图表
在这一步中,你需要使用 show() 来显示图表。
plt.show()
总结
本实验使用 Python 的 Matplotlib 探索了多元正态分布上的各种归一化方法。你了解了线性归一化、幂律归一化,以及如何使用 Matplotlib 来可视化多元正态分布。