【问题标题】:Produce random wavefunction产生随机波函数
【发布时间】:2015-05-16 23:50:44
【问题描述】:

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

例如,我的 x 值是从 1 到 1000。我不想生成分散的随机 y 值,我需要一条平滑的曲线。就像某种非常扭曲的正弦曲线,具有不同的幅度和波长。

是否已经存在可以让我轻松做到这一点的东西?

【问题讨论】:

    标签: python matplotlib


    【解决方案1】:

    试试这个代码:

    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 参数),结果越平滑。

    例子:

    【讨论】:

    • 您好,谢谢。这不是我要找的。潜在的罪波需要变化更多。我认为更像是股市趋势。这里的蓝线或绿线:crestmontresearch.com/docs/Inflation-PE-FAQ-640x427.jpg
    • 我现在添加了一个不同的功能,一种随机游走。
    • 好的,谢谢。有没有办法让它更流畅?
    • 是的,例如使用连续平均值(更新答案)。
    猜你喜欢
    • 2016-10-08
    • 2011-10-05
    • 2019-12-15
    相关资源
    最近更新 更多