给定一组2D点,我想用给定的内部结数使最佳样条曲线适合此数据。
我已经看到我们可以使用scipy的LSQUnivariateSpline指定结的数量和位置,但是它不允许我们only指定结的数量。
从UnivariateSpline文档中,似乎暗示它们具有一种以给定数量的节数拟合样条曲线的方法,因为有关平滑因子s
的文档说明(强调我):
用于选择节数的正平滑系数。 编号的结数将增加,直到满足平滑条件为止...
因此,尽管我可以以某种向后的方式进行处理并搜索平滑因子,直到产生具有所需节数的样条为止,但从计算效率的角度来看,这似乎是一种相当荒谬的方法。正在执行两个额外的搜索步骤,以相互抵消并获得直接在开始时就已经计算出的结果。
我进行了搜索,但是没有找到直接以给定数量的结数访问此样条插值的函数。我不确定是否错过了一些简单的东西,或者是否隐藏在某个位置的更深处和/或在API中不可用。
注意:不需要scipy解决方案,任何python库或手工制作的python代码都可以(我在这里使用scipy只是因为我在python中所有有关样条插值的搜索都落在了我身上。]
Scipy没有具有固定结数的平滑样条。您可以提供结,也可以通过平滑条件旋钮让FITPACK选择它。
不幸的是,看起来UnivariateSpline constructor将计算工作传递给了函数dfitpack.curf0
,即dfitpack.curf0
。
因此,尽管文档指出可以通过调整结数来满足平滑要求,但是在python API中给定了许多结数的情况下,无法直接访问适合样条的函数。
鉴于此,如果希望避免使用环形交叉搜索方法,则可能需要寻找另一个库或自己编写算法。但是,在许多情况下,可以通过调整平滑参数来简单地对所需的节数进行二进制搜索。