内置函数scipy.signal.savgol_filter返回错误

时间:2017-04-23 19:51:50

标签: python filter scipy

我正在尝试使用scipy.signal.savgol_filter函数过滤数据集,但是我收到错误

TypeError: expected x and y to have same length

当我尝试在新列表中分配数据时。

更奇怪的是,就在我上一次计算之前,一切都按预期工作,但现在我明白了。我试图创建一个与已过滤的大小相同的空列表,但是我得到了同样的错误。

以下是我的代码的一部分:

import scipy as sc
import scipy.signal
Cf = sc.signal.savgol_filter(x=C, window_length=299, polyorder=3)

其中C是一个定义良好的浮点类型数列表。

2 个答案:

答案 0 :(得分:4)

如果window_length大于C的长度(例如savgol_filter([3, 1, 4, 1, 5, 9], window_length=7, polyorder=3)),则会收到您报告的错误。

在SciPy 1.0.0中,隐藏的错误消息已被替换为更具信息性的消息:

ValueError: If mode is 'interp', window_length must be less than
or equal to the size of x.

答案 1 :(得分:0)

错误消息令人困惑。在我的情况下问题是输入数组。它采用以下形式:

x = np.array([[3], 
              [1],
              [4],
              [1], 
              [5], 
              [9]])

np.ravel提供扁平化解决了问题:

>>> np.ravel(x)
array([3, 1, 4, 1, 5, 9])