首页 > 解决方案 > python中的低峰

问题描述

我有一列的值从 20 到 45,平均值为 35。我想用阈值识别上下峰值。我能够找到上峰,但找不到下峰。我试过下面的代码:

from scipy.signal import find_peaks
vector=Agitator['AGITATOR AMPS'].values
peaks, _ = find_peaks(vector, height=53)
plt.figure(figsize=(15,5))
plt.plot(vector)
plt.plot(peaks,vector[peaks],"o")
plt.show()

我该如何改进呢?

标签: pythondataframescipy

解决方案


find_peaks 只寻找局部最大值(而不是最小值)

您可以在数据的负数上使用 find peaks -> find_peaks(-vector)

    Array = np.random.uniform(20,45,size=(50))
    peaks, _ = find_peaks(Array, height=20)
    peaks2, _ = find_peaks(-Array)
    plt.plot(Array)
    plt.plot(peaks,Array[peaks],"o")
    plt.plot(peaks2,Array[peaks2],"o")

结果图

不过,使用负值的 height 参数似乎会造成复杂性。但是,如果您只是添加像 find_peaks(-vector+max(vector)) 这样的最大值,它应该可以正常工作:

    Array = np.random.uniform(20,45,size=(50))
    peaks, _ = find_peaks(Array, height=20)
    peaks2, _ = find_peaks(-Array+45, height=20)
    plt.plot(Array)
    plt.plot(peaks,Array[peaks],"o")
    plt.plot(peaks2,Array[peaks2],"o")

结果图

另外我认为你 53 岁的身高在 20 到 45 之间是错误的,因为 45-20 < 53。


推荐阅读