在 Python 中查找峰值

Shivam Arora 2023年1月30日 2021年12月2日
  1. 在 Python 中使用 scipy.signal.find_peaks() 函数检测峰值
  2. 在 Python 中使用 scipy.signal.argrelextrema() 函数检测峰值
  3. 在 Python 中使用 detecta.detect_peaks() 函数检测峰值
在 Python 中查找峰值

峰值是高于大多数局部值的值。可以有一个全局最大峰值或多个峰值。图中的峰值应该是可见的和定义的,不应隐藏在数据噪声中。

在本文中,我们将找到 Python 中不同值集的峰值。

在 Python 中使用 scipy.signal.find_peaks() 函数检测峰值

scipy.signal.find_peaks() 可以检测给定数据的峰值。很少有参数与此函数 widththresholddistanceprominence 相关联。它返回找到峰值的值的索引。

例如,

from scipy.signal import find_peaks
lst = [5, 3, 2, 19, 17, 8, 13, 5, 0, 6, 1, -5, -10, -3, 6, 9, 8, 14, 8, 11, 3,
    2, 22, 8, 2, 1 ]
peaks, _ = find_peaks(lst, height=0)
print(peaks)

输出:

[ 3  6  9 15 17 19 22]

在 Python 中使用 scipy.signal.argrelextrema() 函数检测峰值

此函数类似于 find_peaks() 函数。此外,它还包含一个 order 参数。此参数是用作最小化过滤器的距离参数。我们需要提供 comparator 参数作为 np.greater 方法来计算峰值的索引。

例如,

import numpy as np
from scipy.signal import argrelextrema
lst = [5, 3, 2, 19, 17, 8, 13, 5, 0, 6, 1, -5, -10, -3, 6, 9, 8, 14, 8, 11, 3,
    2, 22, 8, 2, 1 ]
peaks = argrelextrema(np.array(lst), np.greater)
print(peaks)

输出:

(array([ 3,  6,  9, 15, 17, 19, 22], dtype=int64),)

在 Python 中使用 detecta.detect_peaks() 函数检测峰值

基于 Marcos Duarte 编写的材料的算法在 detect_peaks() 方法中实现,以在给定的一组值中找到峰值。在这个函数中,调谐和过滤支持不如其他功能完整。

例如,

from detecta import detect_peaks
lst = [5, 3, 2, 19, 17, 8, 13, 5, 0, 6, 1, -5, -10, -3, 6, 9, 8, 14, 8, 11, 3,
    2, 22, 8, 2, 1 ]
index = detect_peaks(lst)
print(index)

输出:

[ 3  6  9 15 17 19 22]