python - 如何从多元正态分布创建多个观测值?
问题描述
我正在尝试从多元正态分布(均值,I)创建 n = 100 个观测值 x,而 x 是(2,)向量,并且已知均值遵循另一个多元分布(([0,0],sigma ))。我怎样才能实现这些?我被 np.random.multivariate_normal 函数中的尺寸部分困住了,似乎我从未设置过我想要的尺寸。
mean_mean = np.array([0,0])
mean_sigma = np.array([[0.1,0],[0,0.1]])
mu = np.random.multivariate_normal(m0,S0,1).reshape(2,)
u = np.array([0,0])
I = np.array([[1,0],[0,1]])
x = np.random.multivariate_normal(u,I,100)
解决方案
由于我们不知道均值的值,而只知道均值遵循某种分布,因此我们首先需要对n=100
均值进行采样,我们可以这样做:
import numpy as np
samples = 100
mean_mean = np.array([0, 0])
mean_sigma = np.array([[0.1, 0], [0, 0.1]])
mu = np.random.multivariate_normal(mean_mean, mean_sigma, samples)
有了这个,我们就可以对x
我们想要的值进行采样。不幸的是,我们传递给的均值multivariate_normal
必须是一维的,因此我们不能对不同均值的绘制进行矢量化。相反,在这里,我遍历了给出我们的x
值的方法。
I = np.array([[1, 0], [0, 1]])
x = np.zeros([samples, 2])
for i in range(samples):
x[2*i:2*(i+1)] = np.random.multivariate_normal(mu[i], I, 1)
编辑
经过一番思考,很容易矢量化x
. 为此,我们将从标准多元法线中提取并转换输出。
x = np.random.multivariate_normal(np.zeros(2), I, samples)
x += mu
推荐阅读
- java - 使用枚举实现策略模式
- c# - 如何仅在 C# 的第一级解析嵌套括号
- ansible - 如何使用 ansible 获取符号链接或目录的日期时间戳?
- reactjs - 为什么在 Next.js 中导入 CSSRulePlugin 会导致错误?
- python - Python Scatter Plot Edgecolors by Label
- javascript - 有没有办法使用 Javascript 向多个元素添加不同的 ID?
- c# - Linq 查询语法到方法查询语法
- python - 使用 Keras 进行多类图像识别
- javascript - SpeechSynthesis.pause() 应该返回 true 但返回 false
- php - Cron 不会在 Centos7 的 PHP 脚本中执行 MySql