【问题标题】:vectorized indexing/slicing in numpy/scipy?numpy/scipy中的矢量化索引/切片?
【发布时间】:2011-10-16 03:52:29
【问题描述】:

我有一个数组 A,我有一个切片索引 (s,t) 的列表,我们称这个列表为 L。

我想找到 A[s1:t1], A[s2:t2] 的 85 个百分位数 ...

有没有办法在 numpy 中对这些操作进行矢量化?

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

看起来很麻烦。

非常感谢!

PS:假设 s1

【问题讨论】:

  • A的形状是什么?如果它是 (n,),那么 t_k- s_k 对于所有 k 是否都是常数? IE。你的滑动窗口有一个恒定的宽度吗?谢谢
  • @eat:不,我的滑动窗口没有恒定的宽度,不幸的是采样率不均匀。 A 的形状是一维的。
  • @eat:我也想知道是否有用于等宽滑动窗口的矢量化算法
  • 是的,如果你有恒定的宽度,有几种方法可以简化代码。而且,如果您有真正不均匀的采样数据,您总是可以重新采样它以使其均匀(通过插值,尽管您仍然需要指定正确的插值方法)。想详细说明您的具体情况吗?谢谢
  • @eat:很抱歉我真的无法插入数据。 “样本”不是一个好词。我正在处理市场数据。你知道,如果交易发生在这里,我真的不能假设它发生在其他地方。 =)

标签: python statistics numpy scipy vectorization


【解决方案1】:

鉴于您处理的是非均匀间隔(即切片的大小不同),不,没有办法让 numpy 在单个函数调用中执行此操作。

如果它是统一的切片大小,那么您可以使用各种技巧来做到这一点,正如 @eat 评论的那样。

但是,列表理解有什么问题?它与上面的循环完全相同,但如果您担心的话,它看起来“更干净”。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-09
    • 2021-10-13
    • 2016-07-24
    • 2014-08-15
    • 1970-01-01
    相关资源
    最近更新 更多