在 Python 中查詢峰值

Shivam Arora 2023年1月30日
  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]