产生随机波函数
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
参数)越大,结果越平滑。
示例:
我需要在 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
参数)越大,结果越平滑。
示例: