问题描述
虽然使用scipy的splrep函数为以下给定的数据点拟合三次B样条,但输出结果为零数组,并表示输入数据有错误。我已经检查了doc中写的条件,因此输入似乎是理智的。
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.,72.5,72.5]),array([0.,0.,0.]),3),0.0,10,'Error on input data')
解决方法
从documentation的注释
下如果提供了结,则结点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