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中文网其他相关文章!