我需要在matplotlib中生成一条随机曲线。
我的x值范围为1到1000,例如。我不想生成分散的随机y值,我需要一条平滑的曲线。就像某种变幅和波长不同的扭曲正弦曲线一样。
有没有现成的东西可以让我轻松地做到这一点?
我的x值范围为1到1000,例如。我不想生成分散的随机y值,我需要一条平滑的曲线。就像某种变幅和波长不同的扭曲正弦曲线一样。
有没有现成的东西可以让我轻松地做到这一点?
尝试这段代码:
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))
它将提供一个带有一些噪声的正弦波:
编辑:
看起来你需要一种叫做高斯随机漫步的东西。这个函数可以为你完成:
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
步随机漫步。我会把这个交给你 :)
编辑2:
如果你想得到更平滑的曲线,可以应用一个移动平均值(从这个问题借鉴):
def runningMean(x, N):
return np.convolve(x, np.ones((N,))/N)[(N-1):]
pl.plot(x, runningMean(f(x), 10))
使用更大的窗口(N
参数),结果会更加平滑。
示例: