17

我想生成 x 和 y 坐标的相关数组,以测试各种 matplotlib 绘图方法,但我在某个地方失败了,因为我无法numpy.random.multivariate_normal给我想要的样本。理想情况下,我希望我的 x 值介于 -0.51 和 51.2 之间,我的 y 值介于 0.33 和 51.6 之间(尽管我认为相等的范围是可以的,因为我可以在之后限制绘图),但我不确定是什么意思( 0, 0?) 和协方差值我应该用来从函数中获取这些样本。

4

1 回答 1

32

顾名思义numpy.random.multivariate_normal,它会生成正态分布,这意味着在任何给定区间之外找到点的概率都是非零的。您可以生成相关的均匀分布,但这有点复杂。在这里查看两种可能的方法。

如果您想采用正态分布,您可以设置 sigmas,使您的半区间对应于 3 个标准差(如果需要,您还可以过滤掉坏点)。通过这种方式,您将在区间内获得约 99% 的积分,例如:

import numpy as np
from matplotlib.pyplot import scatter

xx = np.array([-0.51, 51.2])
yy = np.array([0.33, 51.6])
means = [xx.mean(), yy.mean()]  
stds = [xx.std() / 3, yy.std() / 3]
corr = 0.8         # correlation
covs = [[stds[0]**2          , stds[0]*stds[1]*corr], 
        [stds[0]*stds[1]*corr,           stds[1]**2]] 

m = np.random.multivariate_normal(means, covs, 1000).T
scatter(m[0], m[1])

在此处输入图像描述

于 2013-09-08T13:49:49.960 回答