当使用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')
如有任何关于此错误来源及其解决方法的帮助,我们将不胜感激。提前感谢!
从文档中,Notes下
如果提供,节点t必须满足Schoenberg-Whitney条件,即必须存在数据点
x[j]
的子集,使得t[j] < x[j] < t[j+k+1]
,对于j=0, 1,...,n-k-2
。
这实际上意味着,如果k
为3(我认为这是默认值(,则n
必须至少为5。在您的情况下,n
是4,因此是错误的原因。为x
、y
和w
提供一个附加条目,或者减少k
。如果你选择后者,请记住以下几点:
k:int,可选
样条曲线拟合的程度。建议使用三次样条曲线。应避免k的偶数值,尤其是在s值较小的情况下。1<=k<=5