2016-09-16 103 views
2

我創建了一個n值從0到2pi的數組。現在,我想生成偏離正態分佈的sin(x)的n個測試數據點。用正態分佈噪聲和平均函數生成數據

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

但是,我不知道當我的意思是sin(x)(而不是常數)時我怎麼能計算出噪音。

回答

2

numpy.random.randn的參數不是均值和標準差。爲此,您需要numpy.random.normal。它的簽名是

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

要添加噪聲的正弦函數,只需使用的0均值在normal()呼叫。平均相當於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

如果將噪聲添加到y座標中,某些測試數據點的值可能超出正弦函數的正常範圍,即不是從-1到1,而是從 - (1 +噪聲)到+(1 +噪聲)。我建議加上噪音的x座標:

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

其中noise必須是一個合適的值給你的問題。