2011-07-29 35 views
2

我有一個數組A,和我有切片指數(S,T)的列表,讓我們稱這個列表L.向量化索引/切塊numpy/scipy?

我想找到A的85個百分位數[S1:T1],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,),那麼對於所有的'k','t_k-s_k'是不變的?即你的滑動窗口是否有恆定的寬度?謝謝 – eat

+0

@eat:不,我的滑動窗口沒有固定的寬度,b/c不幸的是採樣率不均勻。 A的形狀雖然是一個維度。 – CodeNoob

+0

@eat:我也有興趣知道是否有恆定寬度滑動窗口的向量化算法 – CodeNoob

回答

1

鑑於您處理的是非均勻間隔(即切片尺寸不一樣),否則無法在單個函數調用中使用numpy。

如果這是一個統一的切片大小,那麼你可以使用各種技巧,如@eat評論。

但是,列表理解有什麼問題?這與你的循環完全相同,但如果這是你所擔心的,它看起來更「乾淨」。

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

我更擔心運行時的性能。 – CodeNoob