欢迎访问宙启技术站
智能推送

使用scipy.stats.multivariate_normal进行多元正态分布的随机样本生成

发布时间:2023-12-17 11:39:20

scipy.stats.multivariate_normal是scipy库中用于生成多元正态分布(Multivariate Normal Distribution)随机样本的函数。它可用于生成具有指定均值和协方差矩阵的多元正态分布样本。

下面将给出一个使用例子,包括生成样本、计算均值和协方差矩阵以及可视化样本的步骤。

首先,我们需要导入必要的库和函数:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

接下来,我们将定义样本的均值向量和协方差矩阵。

# 定义均值向量
mean = np.array([1, 2])

# 定义协方差矩阵
cov = np.array([[1, 0.5], [0.5, 2]])

然后,我们将利用multivariate_normal函数生成随机样本。

# 生成随机样本
samples = multivariate_normal(mean, cov, size=1000)

这里,size参数指定生成的样本数量。

接下来,我们可以计算生成样本的均值和协方差矩阵。

# 计算均值向量
sample_mean = np.mean(samples, axis=0)

# 计算协方差矩阵
sample_cov = np.cov(samples.T)

这里,np.mean函数用于计算均值,axis=0表示沿着第0个维度计算均值(即每一列的均值)。np.cov函数用于计算协方差矩阵,.T表示转置。

最后,我们可以可视化生成的随机样本。

# 可视化样本
plt.scatter(samples[:, 0], samples[:, 1], marker='.')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Random Samples from Multivariate Normal Distribution')
plt.show()

这里,plt.scatter函数用于绘制散点图,x轴表示 维度,y轴表示第二维度。marker参数指定散点的形状,默认为圆点'.'。

完整的使用例子如下:

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

# 定义均值向量
mean = np.array([1, 2])

# 定义协方差矩阵
cov = np.array([[1, 0.5], [0.5, 2]])

# 生成随机样本
samples = multivariate_normal(mean, cov, size=1000)

# 计算均值向量
sample_mean = np.mean(samples, axis=0)

# 计算协方差矩阵
sample_cov = np.cov(samples.T)

# 可视化样本
plt.scatter(samples[:, 0], samples[:, 1], marker='.')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Random Samples from Multivariate Normal Distribution')
plt.show()

运行以上代码,将会生成一张散点图,表示生成的多元正态分布随机样本。

综上所述,scipy.stats.multivariate_normal可以方便地用于生成多元正态分布的随机样本,并可通过计算均值和协方差矩阵来描述生成样本的统计特征。同时,可视化样本有助于对生成结果进行直观的理解和分析。