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

对声谱图应用核运算时触发IndexError错误排查

错误产生原因
  • 核心诱因是scipy.signal.find_peaks(代码中简写为sg.find_peaks)的返回值接收逻辑错误。该函数固定返回长度为2的元组:第一个元素是检测到的峰值对应的整数索引数组,第二个元素是存储峰值高度、凸起度等属性的字典。
  • 代码中直接将find_peaks的完整返回元组赋值给detectP、detectM变量,后续执行t[detectP]、CorrValP[detectP]这类numpy数组索引操作时,传入的索引是包含字典的元组,不符合numpy数组索引仅支持整数、切片、整数/布尔数组的规则,因此抛出对应IndexError。
  • 代码存在额外隐患:使用file[:-1]截断换行符的写法,若文件列表最后一行没有尾随换行符,会误删文件名的最后一个字符导致音频读取失败,该问题不会触发本次索引错误,但会导致其他场景下的运行异常。
修复方案
  1. 核心修复:调整find_peaks的赋值逻辑,仅提取第一个返回值(峰值索引数组),不需要的属性字典用占位符接收即可,将原代码中两行峰值检测代码替换为:
detectP, _ = sg.find_peaks(CorrValP/np.max(CorrValP), height = 0.5)
detectM, _ = sg.find_peaks(CorrValM/np.max(CorrValM), height = 0.5)
  1. 可选隐患修复:将所有file[:-1]、files[0][:-1]的截断写法替换为.strip()方法,自动去除文件名首尾的换行、空格等空白字符,兼容文件列表最后一行无尾随换行的情况,例如:
    • 将sig_ref, samp_ref = sf.read(files[0][:-1])改为sig_ref, samp_ref = sf.read(files[0].strip())
    • 将循环内sig, samp = sf.read(file[:-1])改为sig, samp = sf.read(file.strip())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 23:42:25