我正在尝试生成一个三维多变量正态分布,其值在每个维度上的范围约为0到100。
当我生成均值为50、方差为16的1D正态分布时:
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的正态分布来说似乎是完全不合理的。
非常感谢您的帮助!
您混淆了方差和标准差。
np.random.normal
的scale=
参数指定标准偏差(即方差的平方根),而传递给np.random.multivariate_normal
的协方差矩阵的对角线对应于每个维度中的方差。
尝试将协方差矩阵的对角线设置为16**2 == 256
。