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

如何用Python复现MATLAB未知数据平滑方法的结果?

复现MATLAB数据平滑函数的问题

问题描述

我需要在Python中复现MATLAB的数据平滑函数,使输出结果完全匹配MATLAB的平滑结果。虽然查阅过MATLAB的平滑功能文档,但受限于自身经验,不知道如何构建对应的公式来达成目标。

原始数据示例

s1 = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.969, 1.0, 0.969, 0.938, 0.750, 0.563]
s2 = [0.500, 0.313, 0.500, 0.656, 0.719, 0.969, 1.000, 0.969, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.00]

平滑后的目标结果

注:为便于阅读,结果保留三位小数

st1 = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.996, 0.988, 0.975, 0.941, 0.873, 0.768, 0.688]
st2 = [0.396, 0.416, 0.525, 0.666, 0.775, 0.883, 0.949, 0.973, 0.992, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00, 1.00]

已尝试的方法

我使用scipy.ndimage中的不同滤波器进行测试,但始终无法得到与目标完全匹配的结果。

注:我采用字符串格式来快速直观地对比数据

from scipy.ndimage import uniform_filter1d as filter

s = [0.500, 0.313, 0.500, 0.656, 0.719, 0.969, 1.000, 0.969, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.000, 1.00]

st = "0.396 | 0.416 | 0.525 | 0.666 | 0.775 | 0.883 | 0.949 | 0.973 | 0.992 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00 | 1.00"


def moving_avg(arr):
    for i in range(1, 6):
        z = ""
        csm = filter(arr, i, axis=-1)

        for num in csm:
            y = round(num*1000)/1000
            z += str(y) + " | "

        print(str(i) + ": " + z[:-3] + "\n")

moving_avg(s)
print("Y: " + str(st))


def test_smoothing(arr, num):
    sumup = 0
    for item in arr[num-2:num+3]:
        sumup += item
        print(item)
    res = sumup / 5
    print(res)

数据对比示意图

数据平滑前后对比示意图

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 03:42:46