scipy 如何检测数据中的水平线(停滞)?[已关闭]

bq3bfh9z  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(111)

**已关闭。**此问题需要debugging details。当前不接受答案。

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
4天前关闭。
Improve this question
如何在python中检测数据中的水平线?
我已经用函数scipy.signal.find_peaks()找到了局部最小值和最大值。我可以用它来分离上升部分和下降部分。但是我需要把峰值从平坦的线中分离出来(在图中用红色圆圈标记)。
我应该用什么方法?有没有什么库可以做到这一点?

2exbekwf

2exbekwf1#

我会写一些算法来找出图中点之间的差异。
pandas.DataFrame.diff非常有用

difference = df.diff(periods=-1)

上面一行得到每一行和下一行之间的差值
使用某个阈值,比如0.1。

threshold = 0.1

检查点之间的差异是否〉阈值
如果差值〈阈值,那么继续下一个点,直到差值〉阈值(这意味着你在那条平线的末端)
继续循环遍历所有数据,直到发现所有的平线,然后对这些数据执行任何操作。
大概是这样的(可能不起作用,基本上是伪代码)

flat_lines = []
for point in difference:
    if difference <= threshold:
        #Change in point a to point b is less than 0.1
        #start = index of start of flat line
        flat_lines.append(start)
        continue
    elif difference > threshold:
        #End of flatline
        #store whatever data you need
        #end= index of endof flat line
        flat_lines.append(end)
        continue

这些帖子还可能有助于:A simple algorithm to detect flat segments in noisy signals
Replace "flatline" repeated data in Pandas series with nan

相关问题