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

使用scipy.find_peaks提取功率谱峰值出现KeyError报错求助

问题排查与解决方案

报错原因

scipy.signal.find_peaks的返回值第二个字典,仅当调用时显式传入了对应参数,才会生成对应的键值对:

  • 只有传入height参数且值不为None时,返回字典才会包含peak_heights字段
  • 你当前代码中height参数设置为None,所以返回的字典里不存在这个键,访问时自然触发KeyError

修复方案

修改find_peaks调用行的height参数,设置为符合你功率谱数据的合理阈值即可,示例如下:

# 可根据你的功率谱实际取值调整height阈值,比如设为0、均值、或指定数值
peaks, properties = find_peaks(List, height=np.mean(List), threshold=None, distance=None, prominence=None, width=None)
height = properties['peak_heights']

其他代码优化建议(避免后续报错)

  • 读取的txt文件返回的是DataFrame结构,建议转为一维数组再处理,防止维度不匹配报错:
    power_list = pd.read_table(r'G:\Downloads\power_list_6779699.txt').values.flatten()
    frequency_list = pd.read_table(r'G:\Downloads\List_Frequency.txt').values.flatten()
    
  • 无需循环创建List变量,直接将高斯滤波后的结果展平即可,性能更高:
    df = gaussian_filter(power_list, sigma=37)
    List = df.flatten()
    
  • 绘图时scatter的颜色参数需要显式指定c,且峰值位置要和x轴单位对齐,避免点位置偏移、参数识别错误:
    ax.scatter(peak_pos*1e6, height, c='r', s=10, marker='D', label='Maxima')
    

修复后完整可运行代码

import matplotlib.pyplot as plt
import pandas as pd
from scipy.ndimage import gaussian_filter
from scipy.signal import find_peaks
import numpy as np

# 导入数据并转为一维数组
power_list = pd.read_table(r'G:\Downloads\power_list_6779699.txt').values.flatten()
frequency_list = pd.read_table(r'G:\Downloads\List_Frequency.txt').values.flatten()

# 高斯滤波
df = gaussian_filter(power_list, sigma=37)
List = df.flatten()

# 查找峰值,height可根据实际数据调整
peaks, properties = find_peaks(List, height=np.mean(List))
height = properties['peak_heights'] 
peak_pos = frequency_list[peaks] 

# 绘图
fig = plt.figure()
ax = fig.subplots()
plt.title('KIC6779699')
plt.xlim([5.6E1,1.16E2])
plt.xlabel('Frequeny(μHz)')
plt.ylabel('Power density p.p.m')
ax.plot(frequency_list*1E6, df, 'k', linewidth=.2)
ax.scatter(peak_pos*1e6, height, c='r', s = 10, marker = 'D', label = 'Maxima')
plt.legend()
plt.show()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 06:24:01