首页 > 解决方案 > 为什么 scipy 的 splrep 在输入数据上显示错误?

问题描述

在使用 scipy 的 splrep 函数为下面给定的数据点拟合三次 B 样条曲线时,输出结果是一个零数组,它表示输入数据有错误。我已经检查了文档中写的条件,因此输入看起来很合理。

knot = [70.0]
X= [65. ,  67.5, 70. , 72.5]
Y= [70.9277775 , 50.40025663 , 42.45372799 , 57.39316434]
Weight= [0.13514246 , 0.33885943 , 0.87606185 , 0.31531958]
SplineOutput=intp.splrep(X, Y, task=-1, t=knot, full_output=1, w=Weight)
SplineOutput 
>>>((array([65. , 65. , 65. , 65. , 70. , 72.5, 72.5, 72.5, 72.5]), array([0., 0., 0., 0., 0., 0., 0., 0., 0.]), 3), 0.0, 10, 'Error on input data')

任何有关此错误来源及其解决方法的帮助将不胜感激。提前致谢!

标签: pythonscipysplinebspline

解决方案


文档中,在Notes下

如果提供,节点 t 必须满足 Schoenberg-Whitney 条件,即,必须有一个数据点的子集,x[j]t[j] < x[j] < t[j+k+1],对于j=0, 1,...,n-k-2

这实际上意味着 ifk是 3,我认为这是默认值,n必须至少为 5。在您的情况下,n是 4,因此为什么会出现错误。要么提供一个额外的条目,x要么减少。如果您选择后者,请记住以下几点:ywk

k:整数,可选

样条拟合的程度。建议使用三次样条。应避免使用偶数 k 值,尤其是在 s 值较小的情况下。1 <= k <= 5


推荐阅读