如何在一维阵列中查找峰



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

我有这个肘左关节的 Y 坐标数组。你可以在这里想象这一点。现在,我想提出一个解决方案,可以计算该数组中的峰值数或局部最大值。

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

您可以使用 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

更多信息在这里: https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.find_peaks_cwt.html

很简单,将数据放在一维数组中,并将每个值与邻域进行比较,n-1 和 n+1 数据小于 n。

按照罗伯特·瓦伦西亚的建议读取数据

   max_local=0
for u in range (1,len(data)-1):
if ((data[u]>data[u-1])&(data[u]>data[u+1])):
                            max_local=max_local+1

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

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

最新更新