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