Matlab的filter()与SciPy的lfilter()

10 投票
1 回答
16736 浏览
提问于 2025-04-17 10:36

根据他们的文档,Matlab的filter()SciPy的lfilter()看起来应该是“兼容”的。不过,我在把一个比较大的Matlab代码移植到Python时遇到了问题,出现了ValueError: object of too small depth for desired array的错误。因为我想不出怎么简单地展示我的源代码,所以我就用Matlab文档中的例子:

data = [1:0.2:4]';
windowSize = 5;
filter(ones(1,windowSize)/windowSize,1,data)

我把它翻译成Python是:

import numpy as np
from scipy.signal import lfilter

data = np.arange(1, 4.1, 0.2)
windowSize = 5
lfilter(np.ones((1, windowSize)) / windowSize, 1, data)

在这种情况下,我得到了:
ValueError: object too deep for desired array

为什么会出现这些错误呢?

1 个回答

7

你在创建全是1的数组时,为什么要多加一个维度呢?这样做是有什么特别的需求吗?你是不是需要这样的格式:

lfilter(np.ones(windowSize) / windowSize, 1, data)

撰写回答