2011-07-29 15 views
2

私は、配列Aを持っている、と私はスライスインデックス(S、T)のリストを持っている、のは numpy/scipyのベクトル化インデックス/スライス?

L.

このリストを呼び出してみましょう私は[S1:T1]の85パーセンタイルを見つけたい、A [S2 :t2] ...

numpyでこれらの演算をベクトル化する方法はありますか?

ans = [] 
for (s,t) in L: 
    ans.append(numpy.percentile(A[s:t], 85)); 

のように見えます。

ありがとうございます!

PS:s1と仮定すると安全です< s2 .... t1 < t2 .....これは実際にはスライディングウィンドウのパーセンタイルの問題です。

+1

「A」の形は何ですか?それが(n、)ならば、 't_k-s_k'はすべての' k'に対して一定であるでしょうか?私。あなたのスライディングウィンドウは一定の幅を持っていますか?ありがとうございます – eat

+0

@eat:私のスライドウィンドウは一定の幅を持たず、残念ながらサンプルレートは一様ではありません。 Aの形は1つの次元です。 – CodeNoob

+0

@eat:一定幅のスライディングウィンドウ用のベクトル化されたアルゴリズムがあるかどうかを知ることにも興味があります – CodeNoob

答えて

1

不均一な間隔(つまり、スライスのサイズが同じではない)を扱っているとすれば、いいえ、1回の関数呼び出しでnumpyを実行する方法はありません。

スライスサイズが一様であれば、@eatがコメントしたように、さまざまなトリックでこれを行うことができます。

しかし、リストの理解には何が問題なのですか?上記のループとまったく同じですが、心配している場合は「クリーン」に見えます。

ans = [numpy.percentile(A[s:t], 85) for s,t in L] 
+0

私は実際にランタイムのパフォーマンスをもっと心配しています.. – CodeNoob