2011-07-29 39 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