试试这个代码:
import matplotlib.pyplot as pl
import numpy as np
x = np.linspace(1, 10)
def f(x):
return np.sin(x) + np.random.normal(scale=0.1, size=len(x))
pl.plot(x, f(x))
它会给你一个正弦波,并添加一些噪音:
Edit:
似乎是某种随机游走 http://en.wikipedia.org/wiki/Random_walk#Gaussian_random_walk这就是您正在寻找的。这个函数将为你做到这一点:
def f(x):
y = 0
result = []
for _ in x:
result.append(y)
y += np.random.normal(scale=1)
return np.array(result)
这是它的外观示例(带有x = np.linspace(0, 1000, 1000)
):
它不是一个函数x
但不再如此,因此代码可能应该被重构以生成随机游走n
步骤代替。我把这个留给你:)
Edit 2:
如果您想要更平滑的曲线,您可以应用运行平均值(从这个问题中窃取 https://stackoverflow.com/a/13732668/98057):
def runningMean(x, N):
return np.convolve(x, np.ones((N,))/N)[(N-1):]
pl.plot(x, runningMean(f(x), 10))
较大的窗口(N
您使用的参数),结果越平滑。
Example: