python 移动平均值_python - 如何使用NumPy计算移动平均值? - 堆栈内存溢出

这里有各种方法以及一些基准。 最好的方法是使用来自其他库的优化代码的版本。 bottleneck.move_mean方法可能是最好的方法。 scipy.convolve方法也非常快速,可扩展,并且在语法和概念上都很简单,但是对于很大的窗口值来说,缩放效果并不理想。 如果您需要纯粹的numpy方法,那么numpy.cumsum方法很好。

注意:其中一些(例如bottleneck.move_mean )未居中,将会移动您的数据。

import numpy as np

import scipy as sci

import scipy.signal as sig

import pandas as pd

import bottleneck as bn

import time as time

def rollavg_direct(a,n):

'Direct "for" loop'

assert n%2==1

b = a*0.0

for i in range(len(a)) :

b[i]=a[max(i-n//2,0):min(i+n//2+1,len(a))].mean()

return b

def rollavg_comprehension(a,n):

'List comprehension'

assert n%2==1

r,N = int(n/2),len(a)

return np.array([a[max(i-r,0):min(i+r+1,N)].mean() for i in range(N)])

def rollavg_convolve(a,n):

'scipy.convolve'

assert n%2==1

return sci.convolve(a,np.ones(n,dtype='float')/n, 'same')[n//2:-n//2+1]

def rollavg_convolve_edges(a,n):

'scipy.convolve, edge handling'

assert n%2==1

return sci.convolve(a,np.ones(n,dtype='float'), 'same')/sci.convolve(np.ones(len(a)),np.ones(n), 'same')

def rollavg_cumsum(a,n):

'numpy.cumsum'

assert n%2==1

cumsum_vec = np.cumsum(np.inse

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值