【问题标题】:Python/Numpy: Is there an efficient way to calculate moving averages with multiple windows?Python/Numpy:有没有一种有效的方法来计算多个窗口的移动平均值?
【发布时间】:2020-12-29 03:22:01
【问题描述】:

我正在编写的程序的一部分包含计算以下内容的代码:

data = np.array(..........)
param = np.array(range(100)+1)
result = np.array([data[-x:].mean() for x in param])

此代码用于一个巨大的循环,因此性能至关重要。它表明第 3 行 (result = ...) 花费的时间最多 - 我想知道是否有更好的方法来执行此操作?

欢迎提出任何建议!

【问题讨论】:

  • np.array(range(100)+1) 这无效?你的意思是np.arange(100)+1?另外,您是否真的在向后收集数组的平均值(最后一个样本、最后 2 个样本、最后 3 个样本等)
  • 删除 data-science 标签,因为它在这里不相关。
  • 第一部分确实是一个错字,但是是的,我会收集向后的平均值。谢谢!

标签: python pandas performance numpy


【解决方案1】:

如果将 0 添加到数组的开头,然后使用 np.cumsum 创建其累积和,则找到索引 i 和 j 之间的平均值,然后 (my_cumsum[j] - my_cumsum[i]) / (j - i).

这应该可以让您大大简化您的代码。

【讨论】:

    【解决方案2】:

    我想你正在寻找这个:

    data[::-1].cumsum()[:100]/np.arange(1,101)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-06
      • 2013-12-03
      • 2015-05-03
      • 2017-01-12
      • 1970-01-01
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多