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

计算简单移动平均线(SMA)的以下函数存在哪些问题?

修复SMA计算函数的问题

你的SMA计算函数存在两个核心问题,直接导致结果不符合预期:

1. 切片范围错误,窗口元素数量不符

SMA要求每个有效取值对应连续w个数据点的平均值,但你的代码中使用t[i-w:i]:

  • 当i = w-1时,i-w = -1,切片t[-1:i]实际仅取到w-1个元素,比窗口大小少1个,完全违背SMA的定义。
  • 正确切片应为t[i - w + 1 : i + 1],这样当i >= w-1时,切片恰好包含从i-w+1到i的w个连续元素(Python切片左闭右开,因此右端点设为i+1)。

2. 初始化数组的冗余操作

用np.zeros(s)初始化结果数组后再逐个赋值NaN,属于冗余操作,直接用np.full(s, np.nan)可一步创建全NaN数组,更简洁高效。


修复后的基础版本代码

import numpy as np

def SMA_calculation(t, w):
    s = np.size(t)
    g = np.full(s, np.nan)
    # 从第一个有效索引开始循环,省去冗余判断
    for i in range(w-1, s):
        g[i] = np.mean(t[i - w + 1 : i + 1])
    return g

高效向量化版本(替代循环)

如果处理大数据量,手动循环效率较低,可使用numpy卷积实现向量化计算:

import numpy as np

def SMA_calculation(t, w):
    # 用卷积计算窗口平均值,valid模式仅保留有效窗口结果
    sma = np.convolve(t, np.ones(w)/w, mode='valid')
    # 前面补NaN,保证结果长度与输入一致
    return np.concatenate([np.full(w-1, np.nan), sma])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:35:56