产生随机波函数

use*_*817 3 python matplotlib

我需要在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您使用的窗口(参数)越大,结果越平滑.

例:

随意漫步与奔跑的意思

  • 我现在添加了一个不同的功能,一种随机游走。 (2认同)
  • 是的,例如运行平均值(更新的答案)。 (2认同)