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

如何查找数据集中超出任意指定阈值的峰值对应的x轴数值

峰值提取实现方案

你提供的数据集为pandas Series结构,索引PixelNo即为你需要的x值,Series值为对应信号强度,可通过scipy.signal.find_peaks快速实现阈值筛选峰值的需求,步骤如下:

1. 依赖安装

如果未安装相关依赖,执行以下命令:

pip install pandas scipy numpy

2. 代码实现

核心逻辑说明

  • 如果你给出的阈值0.35为归一化后的值,需要先将原始信号归一化到0-1区间;如果阈值是和原始信号值匹配的数值,可以跳过归一化步骤,直接把阈值传入height参数即可。
  • 可通过额外参数调整峰值筛选规则,比如distance设置两个峰的最小间隔像素数、prominence设置峰的突出程度,过滤毛刺噪声峰。
import pandas as pd
from scipy.signal import find_peaks

# 假设calib_1为你读取到的单组Series数据
# 如需归一化到0-1区间使用0.35阈值,执行以下代码
normalized_signal = (calib_1 - calib_1.min()) / (calib_1.max() - calib_1.min())

# 查找超过指定阈值的峰值,返回的peaks为符合条件的峰值在Series中的位置索引
peaks, _ = find_peaks(
    normalized_signal,  # 如不需要归一化,这里替换为calib_1,同时修改下面的height为对应原始阈值
    height=0.35,  # 指定阈值
    # distance=3,  # 可选:两个峰值至少间隔3个像素才会被识别,根据需求调整
    # prominence=0.1  # 可选:过滤毛刺小峰,根据需求调整
)

# 提取峰值对应的x值(PixelNo)
peak_x_list = calib_1.index[peaks].tolist()

# 输出结果
print(peak_x_list)

3. 示例效果

用你给出的开头几个数据测试:

# 模拟示例数据
calib_1 = pd.Series(
    [821.0, 943.0, 806.0, 753.0, 834.0],
    index=[0,1,2,3,4],
    name='Calib_1'
)
normalized_signal = (calib_1 - calib_1.min())/(calib_1.max()-calib_1.min())
peaks, _ = find_peaks(normalized_signal, height=0.35)
print(calib_1.index[peaks].tolist())

运行后输出为[1, 4],即对应数值最高的两个峰值的PixelNo值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:06:02