より明確にするために、私が最初に尋ねた私の質問を以下に言い換えさせてください。
誰かが一歩を踏み出し、次に別の一歩を踏み出すと、振幅が上下する一連のデータポイントがあります。ゼロは、足が地面から離れているときです。
簡単な例は次のようになります。
data_array = (0,0,0,10,20,50,40,30,10,0,0,0,0,0,10,20,50,40,30,10,0,0)
開始(開始するすべてのインデックス)を1つの配列に記録し、停止を別の配列に記録することによって、各ステップがいつ開始および停止するかを決定します。
開始=(4 15)
停止=(9 20)
質問:ここで、各ステップの実際のデータを初期配列からスライスし、それらを列に分けたいと思います。
[注:必要に応じて、開始配列または停止配列のデータ量によって実行されるステップ数がわかっています。]
10 10
20 20
50 50
40 40
30 30
10 10
これらの開始インデックスと停止インデックスを使用して初期配列をスライスする方法がわかりません。または、ステップをスライスするためのフィルター関数が見つかりませんでした。
ところで(2番目の編集) これが役立つ場合に私が使用しているコードの一部です:
sigma = 5
threshold = 30
above_threshold = gaussian_filter(Fz, sigma=sigma) > threshold
#---INDEX ALL STATE CHANGES---
ind = np.where(np.diff(above_threshold))[0] + 1
print ind
元の質問
このタイプの配列では:
data_array = (0,0,0,10,20,50,40,30,10,0,0)
値が20を超え20未満になる時期を判断します。次のようにして、これらのインデックスを開始(20を超える)および停止(20を下回る)として返します。
startstop = np.vstack((ind[::2], ind[1::2])).T
starts1=np.vstack((ind[::2])).T
stops1=np.vstack((ind[1::2])).T
誰かがnumpyを使用して(またはそうではなく)正しい方向に私を向けて、これらの配列(startstop、starts1、stops1)のいずれかを使用してdata_array内のすべての値を抽出し、これを取得できますか?
new_array = (50,40,30)
ありがとう、スコット