如何更简洁地从peak_prominences返回元组中提取目标列表?
解决方案
问题核心
你之前的写法需要两次调用peak_prominences,本质是没有先保存函数返回值,每次取值都重新触发了一次完整的峰值计算流程,既写起来繁琐,还会无意义地消耗计算资源。
最简实现
只需要调用一次函数,把全部返回值保存下来,再按需提取元素即可。
- 一次性接住
peak_prominences的返回值,按语义拆分变量:
按照函数的固定实现逻辑,peak_prominences的返回是固定结构的三元组,依次对应:各峰的突出度、各峰的左边界索引、各峰的右边界索引。
对应你给出的返回结果,拆分后各变量的值为:prominences, left_bases, right_bases = peak_prominences(probsuc, peaks, wlen=7)prominences = array([0.015625, 0.24166667])left_bases = array([9, 36])right_bases = array([14, 42])
- 提取目标区间:
因为左、右边界的数组和峰值是一一对应的,直接按索引取值即可:# 得到第一个峰的区间 [9,14] first_peak_range = [left_bases[0], right_bases[0]] # 得到第二个峰的区间 [36,42] second_peak_range = [left_bases[1], right_bases[1]]
批量简化技巧
如果需要一次性提取所有峰的左右边界区间,不需要逐个写索引,可以直接用zip配对两个边界数组:
all_peak_ranges = list(zip(left_bases, right_bases)) # 输出结果: [(9, 14), (36, 42)]
如果不想拆分三个语义变量,也可以直接接住整个返回元组后取值,只是可读性会稍弱:
peak_output = peak_prominences(probsuc, peaks, wlen=7) # 取第一个峰区间 first_peak_range = [peak_output[1][0], peak_output[2][0]] # 取第二个峰区间 second_peak_range = [peak_output[1][1], peak_output[2][1]]
内容的提问来源于stack exchange,提问作者ZR-
相关产品推荐
相关产品推荐

