Python调用find_peaks查找峰值时如何获取数值而非索引
返回值规则
scipy.signal.find_peaks()返回值为二元元组:
- 第一个元素:存储所有峰值对应位置索引的一维数组
- 第二个元素:存储峰值高度、突出度、宽度等计算属性的字典
未拆分返回值直接使用时,无法单独拿到索引做后续取值操作。
实现方法
方法1:配合numpy批量取值(适配scipy生态,写法最简洁)
scipy信号处理接口原生适配numpy数组,numpy数组支持直接传入索引序列批量取值,是官方文档示例的通用写法:
from scipy.signal import find_peaks import numpy as np a = [2, 3, 4, 1] # 拆分返回值,不需要属性字典时可以用_占位 peaks_idx, _ = find_peaks(a) # 转numpy数组后按索引批量取峰值 peak_values = np.array(a)[peaks_idx] print(peaks_idx) # 输出:[2] print(peak_values) # 输出:[4]
方法2:纯Python列表推导取值(无额外依赖)
如果不想引入numpy,可以遍历拆分出的索引,逐个从原列表取对应值:
from scipy.signal import find_peaks a = [2, 3, 4, 1] peaks_idx, _ = find_peaks(a) peak_values = [a[idx] for idx in peaks_idx] print(peaks_idx) # 输出:[2] print(peak_values) # 输出:[4]
补充说明
如果需要获取峰值的相对高度、半高宽等衍生属性,不需要手动计算,直接读取返回的第二个属性字典内的对应字段即可。
内容的提问来源于stack exchange,提问作者Abhilipsa
相关产品推荐
相关产品推荐

