python求移动平均_如何用NumPy计算移动平均值?

NumPy缺少特定于域的函数可能是由于核心团队的纪律性和对NumPy主指令的忠实性:提供了N维数组类型,以及创建和索引这些数组的函数。像许多基本目标一样,这个目标并不小,纽比做得很出色。

更大的SciPy包含更大的领域特定库集合(SciPy devs称为子包)——例如,数值优化(优化)、信号处理(信号)和积分(积分)。

我的猜测是,您所追求的功能至少在一个SciPy子包中(SciPy.signal也许);但是,我将首先在SciPy scikit s集合中查找,确定相关的scikit并在那里查找感兴趣的功能。

Scikits是基于NumPy/SciPy独立开发的软件包,面向特定的技术领域(例如,scikits image,scikits learn,等等),其中一些软件(特别是用于数值优化的令人敬畏的OpenOpt)受到高度重视,在选择居住在相对较新的scikits标准下之前很久就已经成熟的项目。上面喜欢的Scikits主页列出了大约30个这样的Scikits,尽管其中至少有几个已经不在积极开发之中。

遵循此建议将引导您找到scikits time series;但是,该包不再处于活动开发中;实际上,Pandas已经成为基于事实上的NumPy的时间序列库。

Pandas有几个函数可用于计算移动平均值;其中最简单的函数可能是滚动平均值,您可以这样使用:>>> # the recommended syntax to import pandas

>>> import pandas as PD

>>> import numpy as NP

>>> # prepare some fake data:

>>> # the date-time indices:

>>> t = PD.date_range('1/1/2010', '12/31/2012', freq='D')

>>> # the data:

>>> x = NP.arange(0, t.shape[0])

>>> # combine the data & index into a Pandas 'Series' object

>>> D = PD.Series(x, t)

现在,只需调用函数rolling_mean传入Series对象和窗口大小,在下面的示例中是10天。>>> d_mva = PD.rolling_mean(D, 10)

>>> # d_mva is the same size as the original Series

>>> d_mva.shape

(1096,)

>>> # though obviously the first w values are NaN where w is the window size

>>> d_mva[:3]

2010-01-01 NaN

2010-01-02 NaN

2010-01-03 NaN

验证它是否有效——例如,将原始序列中的值10-15与使用滚动平均值平滑的新序列进行比较>>> D[10:15]

2010-01-11 2.041076

2010-01-12 2.041076

2010-01-13 2.720585

2010-01-14 2.720585

2010-01-15 3.656987

Freq: D

>>> d_mva[10:20]

2010-01-11 3.131125

2010-01-12 3.035232

2010-01-13 2.923144

2010-01-14 2.811055

2010-01-15 2.785824

Freq: D

函数rolling_mean,以及大约十几个其他函数在Pandas文档中非正式地分组为moving window函数;Pandas中的第二个相关函数组称为指数加权函数(例如,ewma,计算指数移动加权平均值)。第二组不包含在第一组(移动窗口函数)中,这可能是因为指数加权的变换不依赖于固定长度的窗口

你可能感兴趣的:(python求移动平均)