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

使用Python验证Matlab filter与scipy.signal.lfilter的结果差异

问题原因与解决方案

差异原因

  • Matlab filter(b,a,x) 函数默认对输入矩阵的第一个非单元素维度执行滤波操作:你的输入xx为100行1列的矩阵,默认沿长度为100的行维度(1索引下的第1维)进行滤波,因此得到你展示的非零结果。
  • Scipy lfilter 函数默认参数axis=-1,即沿输入的最后一个维度执行滤波:你的输入xx形状为(100, 1),最后一维长度为1,相当于对每个单独的数值单独做滤波计算,滤波器第一个系数为0,因此输出全为0,和你观测到的结果一致。

修正方法

显式指定lfilter的滤波维度为第0维(对应Matlab默认处理的维度)即可得到和Matlab完全一致的输出,修改后代码如下:

import numpy as np
from scipy.signal import lfilter

bb = np.arange(0, 100, 1)
aa = 1
xx = np.tile(0.9, (100, 1))
# 指定沿第0维(行方向)滤波,匹配Matlab默认行为
yy = lfilter(b=bb, a=aa, x=xx, axis=0)
print(yy[:10])

运行上述代码后输出的前10行结果如下,和Matlab运行结果完全匹配:

array([[ 0. ],
       [ 0.9],
       [ 2.7],
       [ 5.4],
       [ 9. ],
       [13.5],
       [18.9],
       [25.2],
       [32.4],
       [40.5]])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:45:03