首页 > 解决方案 > Python:来自具有 N 均值和相同协方差矩阵的多元正态样本

问题描述

假设我想从具有相同协方差矩阵(恒等式)但均值不同的多个正态分布中采样 10 次,这些正态分布存储为以下矩阵的行:

means = np.array([[1, 5, 2],
                  [6, 2, 7],
                  [1, 8, 2]])

我怎样才能以最有效的方式做到这一点(即避免循环)

我试过这样:

scipy.stats.multivariate_normal(means, np.eye(2)).rvs(10)

np.random.multivariate_normal(means, np.eye(2))

但是他们抛出一个错误,说平均值应该是一维的。

慢示例

import scipy
np.r_[[scipy.stats.multivariate_normal(means[i, :], np.eye(3)).rvs() for i in range(len(means))]]

标签: pythonnumpyscipydistributionnormal-distribution

解决方案


您的协方差矩阵表明样本是独立的。您可以一次采样它们:

num_samples = 10
flat_means = means.ravel()

# build block covariance matrix
cov = np.eye(3)
block_cov = np.kron(np.eye(3), cov)

out = np.random.multivariate_normal(flat_means, cov=block_cov, size=num_samples)

out = out.reshape((-1,) + means.shape)

推荐阅读