python - 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))]]
解决方案
您的协方差矩阵表明样本是独立的。您可以一次采样它们:
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)
推荐阅读
- java - ExecutorService 未接来电
- java - 如何让这个 Java instanceof 测试返回 false 而不是错误?
- haskell - Haskell Show 实例
- azure - Azure AD - 用户可以同意应用程序代表他们访问公司数据选项为 false
- c# - 如果图片作为路径存储在 MySQL 数据库中,如何在 Datagridview 中显示图片?
- javascript - 我的正则表达式在 Node.js 中不起作用?
- android - 无法启动意图 Intent
- c# - 实体框架数据未保存到数据库
- json - 使用正则表达式解析 JSON 请求
- python-3.x - 如何删除图像的某个部分?