如何在一维数组中找到峰值

Pra*_*iya 5 python arrays numpy kinect

我正在用 python 读取一个 csv 文件并从中准备一个数据帧。我有一个 Microsoft Kinect,它正在记录手臂绑架练习并生成这个 CSV 文件。

我有这个ElbowLeft 关节的 Y 坐标数组。您可以在此处将其形象化。现在,我想提出一个解决方案,该解决方案可以计算此数组中的峰值或局部最大值的数量。

有人可以帮我解决这个问题吗?

Rob*_*cia 5

您可以使用scipy.signal模块中的find_peaks_cwt函数来查找一维数组中的峰值:

from scipy import signal
import numpy as np

y_coordinates = np.array(y_coordinates) # convert your 1-D array to a numpy array if it's not, otherwise omit this line
peak_widths = np.arange(1, max_peak_width)
peak_indices = signal.find_peaks_cwt(y_coordinates, peak_widths)
peak_count = len(peak_indices) # the number of peaks in the array
Run Code Online (Sandbox Code Playgroud)

更多信息请参见:https://docs.scipy.org/doc/scipy/reference/ generated/scipy.signal.find_peaks_cwt.html


Jas*_* K. 1

您可以尝试使用平滑滤波器对数据进行平滑,然后找到前后值小于当前值的所有值。这假设您想要序列中的所有峰值。需要平滑滤波器的原因是为了避免局部最大值。所需的平滑级别取决于数据中存在的噪声。

简单的平滑滤波器将当前值设置为序列中当前值之前的 N 个值和之后的 N 个值以及正在分析的当前值的平均值。