我在做公司的一个项目时遇到一个问题,我用示波器抓取到了正弦波数据,在我的python程序中是一个数组,长度很长,有20M个数据。我需要得到这组正弦波数据的峰峰值,我已经用过了直接求最大最小值的方法,但我对此算法并不满意,因为不够高大上。即我需要一个合适的峰值查找算法,要求这个算法具有较低的时间复杂度(如果时间复杂度确实无法降下来,也行,我可以用多线程加快计算时间,但最好能有较低的时间复杂度),如果您知道的话,告诉我算法的名字,如果能加上算法的代码和思想更好。
10条回答 默认 最新
- Jackyin0720 2023-06-05 21:45关注
获得1.50元问题酬金 需要的是峰值搜索算法(Peak Search Algorithm),以下是一个简单的实现:
def find_peak_valley(arr): if len(arr) < 3: return arr # Initialize variables max_val = max(arr) min_val = min(arr) peak_val = None valley_val = None # Binary search for peak and valley values mid = len(arr) // 2 while mid > 0: if arr[mid-1] < arr[mid] < arr[mid+1]: peak_val = arr[mid] valley_val = arr[mid-1] if arr[mid-1] < arr[mid] else arr[mid+1] elif arr[mid-1] < arr[mid] and arr[mid] < arr[mid+1]: peak_val = arr[mid] valley_val = arr[mid+1] if arr[mid+1] < arr[mid] else arr[mid-1] elif arr[mid-1] > arr[mid] and arr[mid] > arr[mid+1]: valley_val = arr[mid] peak_val = arr[mid-1] if arr[mid-1] > arr[mid] else arr[mid+1] elif arr[mid-1] > arr[mid] and arr[mid] < arr[mid+1]: valley_val = arr[mid] peak_val = arr[mid+1] if arr[mid+1] > arr[mid] else arr[mid-1] max_val = max(arr[0:mid], max_val) if peak_val <= max_val else peak_val min_val = min(arr[0:mid], min_val) if valley_val >= min_val else valley_val mid = len(arr) // 2 - mid + 1 if mid > 0 else len(arr) return [peak_val, valley_val, max_val, min_val]
解决 无用评论 打赏 举报
悬赏问题
- ¥15 oracle数据库查询语句问题
- ¥15 有没有c++绘制算法的佬们吗救孩一下
- ¥15 android 蓝牙闪退
- ¥15 绝缘子污秽comsol仿真参数
- ¥15 Fatal error in Process MEMORY
- ¥15 labelme生成的json有乱码?
- ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
- ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
- ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
- ¥45 求17位带符号原码乘法器verilog代码