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

请详细解释sum(x[i-n:i+n+1])中切片i-n:i+n+1的起止范围

滑动平滑函数smooth_a代码详解

这是一个实现滑动平均平滑的Python函数,作用是对输入列表做邻域均值处理,让数据变得更平滑。下面逐部分拆解:

1. 列表扩展处理

第一行代码x = [x[0]]*n + x + [x[-1]]*n是为了解决边界问题:原列表的首尾元素没有足够的左右邻域(比如第一个元素左边没有元素),所以用首尾元素各自复制n份,分别补在原列表的左侧和右侧,让后续每个元素都能取到完整的n个左邻域和n个右邻域元素。

2. 核心循环与切片解析

循环for i in range(n, len(x)-n)是遍历扩展后列表的有效区域——跳过开头补的n个元素和结尾补的n个元素,只处理对应原列表元素的位置。

切片x[i-n:i+n+1]的位置说明

  • 起始位置:i - n,切片会包含这个索引对应的元素
  • 结束位置:i + n + 1,切片不会包含这个索引对应的元素
  • 切片总长度:(i+n+1) - (i-n) = 2n+1,正好是「当前元素 + 左边n个元素 + 右边n个元素」的总个数,也就是滑动窗口的大小。

sum(x[i-n:i+n+1])的含义

这个操作就是把滑动窗口内的所有元素求和,再除以窗口大小2n+1,得到当前位置的滑动平均值,也就是平滑后的值。

3. 实例验证(n=1的情况)

原列表x = [1, 2, 6, 4, 5, 0, 1, 2],n=1时:

  • 扩展后的x为[1,1,1,2,6,4,5,0,1,2,2,2]
  • 循环i从1到10(range(1, 11)):
    • 当i=1时,切片x[0:3] = [1,1,1],求和后除以3得1.0,对应原列表第一个元素的平滑值
    • 当i=2时,切片x[1:4] = [1,1,2],求和得4,除以3≈1.333,对应原列表第二个元素的平滑值
    • 以此类推,最终得到的平滑列表为[1.0, 1.3333333333333333, 3.6666666666666665, 4.0, 3.0, 2.0, 1.0, 1.6666666666666667]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:40:33