生成具有正态分布噪声和均值函数的数据

Generate data with normally distributed noise and mean function

我创建了一个 numpy 数组,其中 n 个值从 0 到 2pi。现在,我想生成 n 个偏离 sin(x) 正态分布的测试数据点。

所以我想我需要做这样的事情:t = sin(x) + noise。噪音必须是这样的:noise = np.random.randn(mean, std).

但是,当我的平均值是 sin(x)(而不是常数)时,我不知道如何计算噪声。

numpy.random.randn are not the mean and standard deviation. For that, you want numpy.random.normal 的参数。它的签名是

normal(loc=0.0, scale=1.0, size=None)

要为您的 sin 函数添加噪声,只需在 normal() 的调用中使用均值 0。平均值对应于 loc 参数(即 "location"),默认情况下为 0。因此,鉴于 x 类似于 np.linspace(0, 2*np.pi, n),您可以这样做:

t = np.sin(x) + np.random.normal(scale=std, size=n)

可以使用numpy.random.randn,但您必须按std缩放它,因为randn returns个样本来自标准正态分布,均值为 0,标准差为 1。要使用 randn,您可以这样写:

t = np.sin(x) + std * np.random.randn(n)

如果在y坐标上加入噪声,部分测试数据点的值可能会超出正弦函数的正常范围,即不是从-1到1,而是从- (1+噪声)到+(1+噪声)。我建议将噪声添加到 x 坐标:

t = np.sin(x + np.random.uniform(-noise, noise, x.shape))

其中 noise 必须是适合您的问题的值。