我使用Scipy的find_peaks来计算时间序列中的峰值数量。
我需要计算峰的数量,要求它从0开始,然后福尔斯到0。从右边开始的第二个峰(用一条垂直线表示)在这里被计算,但它不应该被计算,因为它在最后一个峰之前没有下降到0。有没有办法在find_peaks中指定它?
peaks1 = find_peaks(array, height=(1,1.5),prominence=1)
peaks1_5 = find_peaks(array, height=(1.5,2),prominence=1.5)
peaks2 = find_peaks(array, height=2,prominence=2)
fig, ax = plt.subplots(figsize=(30, 10), dpi=80)
plt.plot(spi_neg['date'],spi["SPI-12"])
[plt.axvline(spi_neg.date.iloc[p],c='red',linewidth=0.3) for p in peaks1[0]]
[plt.axvline(spi_neg.date.iloc[p],c='green',linewidth=0.3) for p in peaks1_5[0]]
[plt.axvline(spi_neg.date.iloc[p],c='purple',linewidth=0.3) for p in peaks2[0]]
plt.axhline(2,linestyle='dashed',linewidth=1)
plt.axhline(1.5,linestyle='dashed',linewidth=1)
plt.axhline(1,linestyle='dashed',linewidth=1)
1条答案
按热度按时间eqfvzcg81#
一个带问题的运行代码将是有帮助的,并且一个更精确的可数峰的定义也是有帮助的;- )
首先,我们生成一些数据:
现在我们识别零湖和非零岛
接下来我们用numpy数组填充列表中的非零岛。每个numpy数组包含一个非零岛。
对于列表中的每个numpy数组,您可以根据您的定义(我无法完全捕获)评估峰。