【问题标题】:Generate data with normally distributed noise and mean function生成具有正态分布噪声和均值函数的数据
【发布时间】:2016-09-16 19:09:46
【问题描述】:
我创建了一个 n 值从 0 到 2pi 的 numpy 数组。现在,我想生成 n 个偏离正态分布的 sin(x) 测试数据点。
所以我想我需要做这样的事情:t = sin(x) + noise。噪音一定是这样的:noise = np.random.randn(mean, std).
但是,当我的平均值为 sin(x)(而不是常数)时,我不知道如何计算噪声。
【问题讨论】:
标签:
python
numpy
scipy
normal-distribution
【解决方案1】:
numpy.random.randn 的参数不是均值和标准差。为此,您需要numpy.random.normal。它的签名是
normal(loc=0.0, scale=1.0, size=None)
要为您的 sin 函数添加噪声,只需在调用 normal() 时使用平均值 0。均值对应于loc 参数(即“位置”),默认为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 从标准正态分布返回样本,均值为0,标准差为1。要使用randn,你会写:
t = np.sin(x) + std * np.random.randn(n)
【解决方案2】:
如果给y坐标加上噪声,部分测试数据点的值可能超出正弦函数的正常范围,即不是从-1到1,而是从-(1+noise ) 到 +(1+噪声)。我建议将噪声添加到x 坐标:
t = np.sin(x + np.random.uniform(-noise, noise, x.shape))
noise 必须是适合您问题的值。