2016-05-13 168 views
0

我正在尝试生成一个三维多变量正态分布,其值在每个维度的范围从大约0到100。什么是一维情况下方差的等效协方差矩阵?

当我生成均值50和方差16一维正态分布:

data = random.normal(50, 16, 1000) 

所得分布具有值的范围从约0到100。但是,当我扩展该多变量情况下,只有数值范围从35到65:

covar = [[16, 0, 0], [0, 16, 0], [0, 0, 16]] 
data = random.multivariate_normal([50, 50, 50], covar, 1000) 

当使用random.normal为三个维度我得到预期的结果,值范围从0到100。

data = random.normal(50, 16, size=(3,1000)) 

这种差异从哪里来?为了得到我想要在多因素情况下,每个维度值的范围要我做的协方差矩阵是这样的:

covar = [[300, 0, 0], [0, 300, 0], [0, 0, 300]] 

这似乎与均值的正态分布完全不合理50.

任何帮助深表感谢!

回答

0

你在混淆方差和标准差。

scale=参数np.random.normal指定标准偏差(即,方差的平方根),而对角线传递给np.random.multivariate_normal协方差矩阵对应于在每个维度方差

尝试将协方差矩阵的对角线设置为16**2 == 256

+0

现在有道理!我认为'np.random.multivariate_normal'也使用标准偏差,但显然不是。谢谢你的帮助! – mirelio

+0

它被称为co *方差*矩阵的原因... –

+0

我认为你的意思是“(即方差的平方根)”而不是“(即方差的平方)” – ayhan