我正在Python中使用库“scipy.signal”,我有下一个代码:
from scipy import signal
b = [ 0.001016 0.00507999 0.01015998 0.01015998 0.00507999 0.001016 ]
a = [ 1. -3.0820186 4.04351697 -2.76126457 0.97291013 -0.14063199]
data = [[ 1.]
[ 1.]
[ 1.]
...]
# length = 264
y = signal.filtfilt(b, a, data)
但是当我执行代码时,我收到下一条错误消息:
The length of the input vector x must be at least padlen, which is 18.
我能做什么?
最佳答案
看来data
是形状为 (264, 1) 的二维数组。默认情况下,filtfilt
沿着输入数组的最后一个轴进行过滤,因此在您的情况下,它尝试沿着数据长度为 1 的轴进行过滤,这对于默认填充方法来说不够长。
我假设你的意思是解释 data
作为一维数组。您可以添加参数 axis=0
y = signal.filtfilt(b, a, data, axis=0)
沿第一个维度(即沿列向下)过滤,在这种情况下输出 y
也将具有形状 (264, 1)。或者,您可以通过使用 np.ravel(data)
展平输入将其转换为一维数组。或者使用索引来选择第一列(也是唯一的列)data[:, 0]
。 (后者仅在 data
实际上是一个 numpy 数组而不是列表的列表时才有效。)例如
y = signal.filtfilt(b, a, np.ravel(data))
在这种情况下,输出 y
也将是一个一维数组,形状为 (264,)。
关于python - Python 中 signal.filtfilt 中的 Padlen 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46849290/