Python/SciPy 中的峰值偵測演算法
偵測資料中的峰值是資料分析中的常見任務。對於 Python 用戶,SciPy 提供了專門為此目的定制的 scipy.signal.find_peaks 函數。
選擇正確的參數
要有效識別峰值,請了解可用的參數參數至關重要。雖然寬度、閾值和距離等參數具有一定的實用性,但真正區分真實峰值和雜訊的參數是突出度。
什麼是突出度?
突出度測量從山峰下降到任何更高地形所需的高度。換句話說,它表示峰值相對於周圍數據點的“重要性”。
使用突出度進行峰值檢測
使用頻率變化的正弦曲線測試 find_peaks 演示了顯著性的有效性。雖然其他參數很難考慮不同的峰寬或雜訊水平,但突出度始終能夠識別重要的峰值。
程式碼範例
以下程式碼片段說明了find_peaks 的用法不同的參數:
<code class="python">import numpy as np import matplotlib.pyplot as plt from scipy.signal import find_peaks x = np.sin(2*np.pi*(2**np.linspace(2,10,1000))*np.arange(1000)/48000) + np.random.normal(0, 1, 1000) * 0.15 peaks, _ = find_peaks(x, distance=20) peaks2, _ = find_peaks(x, prominence=1) # BEST! peaks3, _ = find_peaks(x, width=20) peaks4, _ = find_peaks(x, threshold=0.4) plt.subplot(2, 2, 1) plt.plot(peaks, x[peaks], "xr"); plt.plot(x); plt.legend(['distance']) plt.subplot(2, 2, 2) plt.plot(peaks2, x[peaks2], "ob"); plt.plot(x); plt.legend(['prominence']) plt.subplot(2, 2, 3) plt.plot(peaks3, x[peaks3], "vg"); plt.plot(x); plt.legend(['width']) plt.subplot(2, 2, 4) plt.plot(peaks4, x[peaks4], "xk"); plt.plot(x); plt.legend(['threshold']) plt.show()</code>
結果表明,即使存在噪聲,突出度也能有效辨識顯著峰值。透過將突出度等參數與距離或寬度等其他參數結合,您可以進一步細化複雜資料中的峰值偵測。
以上是Prominence 如何幫助使用 SciPy 在 Python 中進行峰值檢測?的詳細內容。更多資訊請關注PHP中文網其他相關文章!