我正在尝试使用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
是一个定义良好的浮点类型数列表。
答案 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])