我正在尝试根据多元正态分布(均值,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)
答案 0 :(得分:0)
由于我们不知道均值,而是只知道均值遵循某种分布,因此我们首先需要制作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