如何在1d数组中找到峰值

时间:2017-04-08 03:28:38

标签: python arrays numpy kinect

我正在python中读取一个csv文件并准备一个数据帧。我有一个Microsoft Kinect,它正在录制Arm Abduction练习并生成这个CSV文件。

我有this array个Y-Coordinates of ElbowLeft关节。您可以将此here可视化。现在,我想提出一个可以计算此数组中峰值数或局部最大值的解决方案。

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

3 个答案:

答案 0 :(得分:2)

很简单,将数据放在一维数组中,并将每个值与邻居进行比较,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

答案 1 :(得分:1)

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

一个简单的平滑滤波器将当前值设置为前一个N值的平均值,并将序列中当前值后的N个值与正在分析的当前值一起设置。

答案 2 :(得分:1)

您可以使用 scipy.signal 模块中的 find_peaks_cwt 功能查找1-D数组中的峰值:

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