微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

有没有办法确定一条线的明显增加和减少?

如何解决有没有办法确定一条线的明显增加和减少?

我想知道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))

enter image description here

解决方法

在您未指定种子的意义上,我不知道为什么生成信号,生成信号的方式以及代码不可复制。无论如何,通常只要拥有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 举报,一经查实,本站将立刻删除。