栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在python中计算指数移动平均值

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在python中计算指数移动平均值

编辑:看来SciKits(补充SciPy的附加工具包)的scikits.timeseries.lib.movi​​ng_funcs子模块中的

mov_average_expw()
功能更适合您的问题的措辞。


要使用平滑因子来计算数据的指数平滑

alpha
(1- alpha)
用Wikipedia的术语):

>>> alpha = 0.5>>> assert 0 < alpha <= 1.0>>> av = sum(alpha**n.days * iq ...     for n, iq in map(lambda (day, iq), today=max(days): (today-day, iq), ...         sorted(zip(days, IQ), key=lambda p: p[0], reverse=True)))95.0

上面的代码并不漂亮,所以让我们对其进行重构:

from collections import namedtuplefrom operator    import itemgetterdef smooth(iq_data, alpha=1, today=None):    """Perform exponential smoothing with factor `alpha`.    Time period is a day.    Each time period the value of `iq` drops `alpha` times.    The most recent data is the most valuable one.    """    assert 0 < alpha <= 1    if alpha == 1: # no smoothing        return sum(map(itemgetter(1), iq_data))    if today is None:        today = max(map(itemgetter(0), iq_data))    return sum(alpha**((today - date).days) * iq for date, iq in iq_data)IQData = namedtuple("IQData", "date iq")if __name__ == "__main__":    from datetime import date    days = [date(2008,1,1), date(2008,1,2), date(2008,1,7)]    IQ = [110, 105, 90]    iqdata = list(map(IQData, days, IQ))    print("n".join(map(str, iqdata)))    print(smooth(iqdata, alpha=0.5))

例:

$ python26 smooth.pyIQData(date=datetime.date(2008, 1, 1), iq=110)IQData(date=datetime.date(2008, 1, 2), iq=105)IQData(date=datetime.date(2008, 1, 7), iq=90)95.0


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/400108.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号