【问题标题】:Built-in function scipy.signal.savgol_filter returns error内置函数 scipy.signal.savgol_filter 返回错误
【发布时间】:2017-09-20 09:47:56
【问题描述】:

我正在尝试使用 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 是定义明确的浮点类型数字列表。

【问题讨论】:

  • C 是一个列表,还是一个数组?也许 C 不是这种方法的正确类型。可以添加一些 C 的示例数据吗?

标签: python filter scipy


【解决方案1】:

如果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.

【讨论】:

  • 确实,这就是问题所在。它以前有效,因为我的列表 C 非常大。非常感谢!
【解决方案2】:

错误信息令人困惑。就我而言,问题出在输入数组上。它采用以下形式:

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

将它提供给np.ravel 解决了这个问题:

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

【讨论】:

  • 确实,一个更具解释性的错误会受到欢迎。 +1。
猜你喜欢
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2014-07-24
  • 2021-12-13
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多