首页 >后端开发 >Python教程 >Prominence 如何帮助使用 SciPy 在 Python 中进行峰值检测?

Prominence 如何帮助使用 SciPy 在 Python 中进行峰值检测?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-10-22 22:44:29382浏览

How Does Prominence Help in Peak Detection in Python Using SciPy?

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn