You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使scipy.signal.find_peaks识别数组负数区平台的首个局部极小值?

解决scipy.signal.find_peaks无法识别平台区域首个极小值的问题

你的问题出在signal.find_peaks的默认行为上——它只识别严格大于相邻点的峰值,而原数组中索引6对应的平台区域(-1,-1),取反后变成平顶(1,1),不符合默认的峰值判定条件。要让它识别这类平台并返回首个元素,只需调整find_peaks的两个参数:

  • plateau_size=(1, None):允许识别包含连续相等值的平台型峰值,参数表示平台长度至少为1(兼容普通单个点的峰值)。
  • left_based=True:当峰值是平台时,返回平台的第一个索引,和你原代码的逻辑对齐。

修改后的完整代码如下:

import numpy as np
from scipy import signal

test = np.array([0, 1, 2, 3, 1, 0, -1, -1, -2, -3, -2, 0])

wanted_mins = np.where(((test[:-2] > test[1:-1]) * (test[2:] >= test[1:-1])) & (test[1:-1] < 0))[0] + 1

# 调整参数后的重构代码
neg_test = np.negative(np.where(test < 0, test, 0.0))
refactored_mins = signal.find_peaks(neg_test, plateau_size=(1, None), left_based=True)[0]

print(wanted_mins)      # 输出: [6 9]
print(refactored_mins)  # 输出: [6 9]

验证后,refactored_mins的结果会和wanted_mins完全一致,同时保留了用signal.find_peaks的简洁性。

内容的提问来源于stack exchange,提问作者cicciodevoto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.21 14:32:02