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

Python实现滤波中位数函数遇问题:无法得到预期输出

问题分析与修正

错误点1:循环范围使用错误

你的for循环误用了列表元素的值作为循环范围,而非索引范围:

  • signal[0]的值是0,signal[-3]的值是1(对应列表索引3的元素)
  • 因此range(0,1)只会让循环执行1次(i=0),但实际需要计算4个中间中位数(y2到y5),循环需执行4次。

正确的循环范围应基于列表索引:每次要取i、i+1、i+2三个连续元素,i的最大取值为len(signal)-3(保证i+2不超出列表索引),所以用range(len(signal)-2)即可(len(signal)-2=6-2=4,range(4)会生成0、1、2、3四个索引,刚好对应4次计算)。

错误点2:不必要的类型转换导致返回值为浮点数

find_median函数里将输入转为float,导致返回的中位数是浮点数(如1.0),与预期的整数输出不符。由于输入都是整数,直接使用原类型即可,statistics.median会返回对应类型的中位数。

修正后的代码

import statistics

def find_median(number1, number2, number3):
    List = [number1, number2, number3]
    return statistics.median(List)

signal = [0,5,1,1,0,1]
med_filter = [signal[0]]
# 遍历正确的索引范围,生成4个中间中位数
for i in range(len(signal)-2):
    x = find_median(signal[i], signal[i+1], signal[i+2])
    med_filter.append(x)
med_filter.append(signal[-1])
print(med_filter)

运行结果

执行后会输出预期结果:[0, 1, 1, 1, 1, 1]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 12:46:58