如何解决有没有办法确定一条线的明显增加和减少?
我想知道Python中是否有一种方法可以识别形成线的数据集中显着的增加和减少?与以前的更改(x-x(i))相比,我的意思是“显着”或“非凡”。
参考下图,我正在寻找一种方法来识别x-x(i)中的“非凡”变化,例如在60到65之间。
编辑:30至50期也将被视为“非凡”,而以上仅作为示例。
import matplotlib.pyplot as pl
import numpy as np
#create random numbers
x = np.linspace(1,80)
def f(x):
y = 0
result = []
for _ in x:
result.append(y)
y += np.random.normal(scale=2)
return np.array(result)
def runningMean(x,N):
return np.convolve(x,np.ones((N,))/N)[(N-1):]
pl.plot(x,runningMean(f(x),80))
解决方法
在您未指定种子的意义上,我不知道为什么生成信号,生成信号的方式以及代码不可复制。无论如何,通常只要拥有signal
,您就可以通过测试来做到这一点:
np.abs(np.diff(signal))
例如在一段时间内达到某个阈值。这等效于测试您感兴趣的x [i]-x [i + 1]的绝对值或导数的绝对值(对于重新缩放的阈值)。 因此,您可以这样做:
signal = runningMean(f(x),80)
abs_diff = np.abs(np.diff(signal))
pl.plot(x,signal)
pl.plot(x[:-1],abs_diff)
查看diff
的行为并评估您认为“非同寻常”的水平。然后确定abs_diff
何时足够高且足够长时间才能满足您所说的“非凡”要求。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。