You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

优化每日周度指数移动平均计算代码,提升执行效率

高效实现每日周度指数移动平均(线性时间复杂度)

你的原代码核心问题是每个交易日都重复遍历整个时间序列、重新生成周度数据并计算EMA,时间复杂度为O(n²),数据量越大效率越低。下面是线性时间(O(n))的优化实现,完全保留原逻辑但效率大幅提升:

优化思路

  1. 一次性生成所有周度数据(和原逻辑一致,取每周最后一个交易日的收盘价)
  2. 仅计算一次周度数据的EMA,这一步的时间复杂度仅和周数相关(远小于交易日数)
  3. 将周度EMA值映射回每个交易日,通过向前填充的方式,让每个交易日自动取到截至当天的最新周度EMA值

优化后的代码

import pandas as pd
from typing import Optional

def weekly_exponential_moving_average(data: pd.DataFrame, window: int, column: Optional[str] = 'Close_Price') -> pd.Series:
    # 1. 一次性生成所有周度收盘价(每周最后一个交易日的数据)
    weekly_closes = data[column].resample('W').last()
    
    # 2. 计算周度数据的EMA,仅执行一次
    weekly_ema = weekly_closes.ewm(span=window, adjust=False).mean()
    
    # 3. 将周度EMA映射到每个交易日,向前填充缺失值(取最新的周度EMA)
    daily_weekly_ema = weekly_ema.reindex(data.index, method='ffill')
    
    return daily_weekly_ema

效率说明

  • 整个流程仅对原始数据遍历一次,所有操作(重采样、EMA计算、重索引填充)都是线性时间复杂度,整体为O(n)
  • 完全匹配原代码的逻辑:每个交易日的取值都是截至当天的最新周度EMA结果,你可以用小数据集对比验证结果一致性

内容的提问来源于stack exchange,提问作者Question1010

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 01:27:24