为什么scipy的splrep在输入数据上显示错误?

问题描述

虽然使用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,因此为什么出错。提供xyw的附加条目或减少k。如果选择后者,请记住以下几点:

k: int,可选

样条拟合的程度。建议使用三次样条。甚至应避免使用k值,特别是对于s较小的情况。 1