python寻峰算法_python做数字分析,如何找到波峰波谷?

本文介绍了如何使用Python的heapq模块找到数值列表中的前5大波峰和波谷。通过示例代码展示了利用nlargest()和nsmallest()函数查找波峰和波谷的方法,并提供了另一种遍历列表直接找出所有波峰和波谷的思路。
摘要由CSDN通过智能技术生成

数字呈现不规律的波动形状,而且值变化也不一定是只朝一个方向,会有反复。请问如何能找出值排名前5的波峰和波谷的大小和位置。有计算相关的函数吗?,

可以尝试使用heapq模块。

import heapq

numbers = [1, 3, 5, 2, 4, 1.1, 3.5, 4.8, 0.5, 2.4, -1.5]

# 输出元祖第一个元素是index,第二元素是比较的数值

print(heapq.nsmallest(5, enumerate(numbers), key=lambda x: x[1]))

# [(10, -1.5), (8, 0.5), (0, 1), (5, 1.1), (3, 2)]

print(heapq.nlargest(5, enumerate(numbers), key=lambda x: x[1]))

# [(2, 5), (7, 4.8), (4, 4), (6, 3.5), (1, 3)]

当要查找的元素个数相对比较小的时候,函数 nlargest() 和 nsmallest() 是很合适的。 如果你仅仅想查找唯一的最小或最大(N=1)的元素的话,那么使用min()和max()函数会更快些。 类似的,如果N的大小和集合大小接近的时候,通常先排序这个集合然后再使用切片操作会更快点 (sorted(items)[:N] 或者是 sorted(items)[-N:] )。 需要在正确场合使用函数nlargest() 和 nsmallest()才能发挥它们的优势 (如果N快接近集合大小了,那么使用排序操作会更好些)。

nums = [1,2,3,2,4,5,4,3,2,1,8,9,10,11,10,9,8]

peaks = []

troughs = []

for idx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值