【问题标题】:Fit spline with given number of knots, but not knot positions拟合具有给定结数的样条,但不拟合结位置
【发布时间】:2020-04-06 09:45:23
【问题描述】:

给定一组 2D 点,我想用给定数量的内部节点将最优样条拟合到该数据。

我看到我们可以使用 scipy 的LSQUnivariateSpline 来指定结的数量和位置,但是它不允许我们指定结的数量.

UnivariateSpline 文档中,似乎暗示他们有一种方法可以用给定的节数拟合样条曲线,正如平滑因子s 状态的文档(强调我的):

用于选择结数的正平滑因子。 编号 结的数量将增加,直到满足平滑条件...

因此,虽然我可以以一种向后的方式进行此操作并搜索平滑因子,直到它产生具有所需结数的样条曲线,但从计算效率的角度来看,这似乎是一种相当荒谬的方法。发生了两个额外的搜索步骤,只是为了相互抵消并获得在开始时已经直接计算的结果。

我已经四处搜索,但没有找到一个函数来直接访问这个具有给定结数的样条插值。我不确定我是否遗漏了一些简单的东西,或者它是否隐藏在某个地方的更深处和/或在 API 中不可用。

注意:不需要 scipy 解决方案,任何 python 库或手工编写的 python 代码都可以(我在这里使用 scipy 只是因为我在 python 中关于样条插值的所有搜索都让我找到了)。

【问题讨论】:

标签: python scipy spline


【解决方案1】:

不幸的是,看起来 UnivariateSpline constructor 将计算工作传递给了函数 dfitpack.curf0,即 implemented in Fortran

因此,尽管文档表明通过调整节点数可以满足平滑要求,但无法直接访问在给定 Python API 的节点数的情况下拟合样条曲线的函数。

鉴于此,如果需要避免迂回的双重搜索方法,看起来可能需要查看另一个库或自己编写算法。但是,在许多情况下,通过调整平滑参数来简单地运行二进制搜索以获得所需的结数是可以接受的。

【讨论】:

    【解决方案2】:

    Scipy 没有具有固定结数的平滑样条曲线。你要么提供你的结,要么让 FITPACK 通过平滑条件旋钮来选择它。

    【讨论】:

      猜你喜欢
      • 2014-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-11
      • 1970-01-01
      • 2020-12-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多