我需要在matplotlib中生成随机曲线.
例如,我的x值从1到1000.我不想生成分散的随机y值,我需要一条平滑的曲线.像某种非常扭曲的sin曲线,具有不同的幅度和波长.
是否已存在允许我轻松完成此操作的内容?
And*_*zlo 12
试试这段代码:
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))
Run Code Online (Sandbox Code Playgroud)
它会给你一个加入一些噪音的正弦波:
编辑:
似乎某种随机游走是您正在寻找的.这个功能会为你做到这一点:
def f(x):
y = 0
result = []
for _ in x:
result.append(y)
y += np.random.normal(scale=1)
return np.array(result)
Run Code Online (Sandbox Code Playgroud)
这是它的外观示例(with 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))
Run Code Online (Sandbox Code Playgroud)
N
您使用的窗口(参数)越大,结果越平滑.
例: