如何使用scipy.find_peaks检测持续多个时间步的特定峰值?
解决
find_peaks无法检测持续多步尖峰的方案 原代码中threshold=15是基于相邻点的差值筛选尖峰,而持续多步的平台型尖峰相邻点差值极小,达不到阈值要求,因此无法被识别。可以通过以下参数调整解决:
使用
prominence参数(推荐)
突出度(prominence)衡量的是峰值相对于周围最近谷底的高度差,不受相邻点差值的限制,适合检测这类有显著高低差的平台型尖峰:from scipy.signal import find_peaks x = [50.7, 50.6, 50.6, 7.6, 12.0, 50.6, 50.4, 50.4, 50.4, 50.4, 50.3, 50.3, 50.2, 50.2, 50.2, 50.2] peaks, properties = find_peaks(x, prominence=15)设置
prominence=15后,所有相对于周围谷底高度差超过15的平台区域都会被检测到,返回的peaks包含平台的特征点(如平台的起始最高点),properties中还会附带plateau_sizes等平台相关信息。使用
plateau_size参数(Scipy 1.7.0+)
如果你使用的是Scipy 1.7.0及以上版本,可直接通过plateau_size指定平台型尖峰的最小持续步数:peaks, properties = find_peaks(x, plateau_size=2)这里
plateau_size=2表示仅识别持续至少2个时间步的平台型尖峰,能精准匹配你需要检测的持续型高值区域。结合
width参数width参数用于指定峰值的最小宽度(以时间步为单位),同样能筛选出持续多步的尖峰:peaks, properties = find_peaks(x, width=2)设置
width=2后,只有宽度≥2的峰值会被检测到,适合识别平台类的持续尖峰。
测试你的数据时,以上方法均可有效检测到前端的50.7/50.6平台,以及后端的50.6/50.4/50.3/50.2系列平台,解决原代码仅能检测单步尖峰的问题。
内容的提问来源于stack exchange,提问作者hoshijun
相关产品推荐
相关产品推荐

