我创建了一个numpy数组,其中n值为0到2pi。现在,我想生成偏离正常分布的sin(x)的n个测试数据点。
所以我想我需要做这样的事情:t = sin(x) + noise
。噪音必须是这样的:noise = np.random.randn(mean, std)
。
但是,当我的意思是罪(x)(而不是常数)时,我不知道如何计算噪音。
答案 0 :(得分:2)
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)
答案 1 :(得分:2)
如果将噪声添加到y
坐标,则某些测试数据点的值可能超出正弦函数的正常范围,即不是-1到1,而是来自 - (1 +噪音)到+(1 +噪音)。我建议将噪音添加到x
坐标:
t = np.sin(x + np.random.uniform(-noise, noise, x.shape))
其中noise
必须是您问题的合适值。