【发布时间】:2015-05-16 23:50:44
【问题描述】:
我需要在 matplotlib 中生成一条随机曲线。
例如,我的 x 值是从 1 到 1000。我不想生成分散的随机 y 值,我需要一条平滑的曲线。就像某种非常扭曲的正弦曲线,具有不同的幅度和波长。
是否已经存在可以让我轻松做到这一点的东西?
【问题讨论】:
标签: python matplotlib
我需要在 matplotlib 中生成一条随机曲线。
例如,我的 x 值是从 1 到 1000。我不想生成分散的随机 y 值,我需要一条平滑的曲线。就像某种非常扭曲的正弦曲线,具有不同的幅度和波长。
是否已经存在可以让我轻松做到这一点的东西?
【问题讨论】:
标签: python matplotlib
试试这个代码:
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))
它会给你一个带有一些噪音的正弦波:
编辑:
您正在寻找某种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 步骤生成随机游走。我会把它留给你:)
编辑 2:
如果您想要更平滑的曲线,可以应用运行均值 (stolen from this question):
def runningMean(x, N):
return np.convolve(x, np.ones((N,))/N)[(N-1):]
pl.plot(x, runningMean(f(x), 10))
您使用的窗口越大(N 参数),结果越平滑。
例子:
【讨论】: