2017-04-08 1 views
2

私はPythonでcsvファイルを読み込み、そこからデータフレームを準備しています。私は、Arm Abduction練習を記録し、このCSVファイルを生成するMicrosoft Kinectを持っています。1d配列のピークを見つける方法

私はthis arrayのElbowLeftジョイントのY座標を持っています。これを視覚化することができますhere。さて、私は、この配列のピーク数または極大値の数を数えることができる解決策を考え出したいと思います。

誰かがこの問題を解決するのに手伝ってもらえますか?

+0

を示唆しています。 – DyZ

答えて

1

平滑化フィルタを使用してデータを平滑化し、前後の値が現在の値より小さいすべての値を見つけることができます。これは、シーケンス内のすべてのピークが必要であることを前提としています。平滑化フィルタが必要な理由は、極大値を避けることです。必要なスムージングのレベルは、データに存在するノイズに依存します。

シンプルスムージングフィルタは、分析中の現在の値とともに、現在の値をシーケンスの現在の値の前のN値とN値の平均値に設定します。

+0

私は平滑化するために移動平均平滑化を使用しました(np.convolveを使用)。 scipy.signalのargrelextremaを使用しました。 –

0

あなたは1次元配列内のピークを見つけるために、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

0

をそれは簡単です、置きますデータを1次元アレイに格納し、各値を隣接ノードと比較すると、n-1およびn + 1データはnより小さい。

読むデータロバート・バレンシアとして `scipy.signal.find_peaks_cwt`を試してみてください

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 
関連する問題