产生随机波函数

Produce random wavefunction

我需要在 matplotlib 中生成一条随机曲线。

例如,我的 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))

它会给你一个添加了一些噪声的正弦波:

编辑:

您要找的似乎是某种 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))

您使用的 window(N 参数)越大,结果越平滑。

示例: