"Invalid input data"来自 SciPy 的三次样条插值过程;插值的坏结果?



我正试图使用scipy.interpolate.bisplrep和scipy.ininterpolate.bdisplev,基于一小部分已知差异,对两个数据集之间的差异进行2D回归。代码为:

splineRT = interp.bisplrep(diffPoints[0], diffPoints[1], RTdiffs)
allDiffs = interp.bisplev(features[0], features[1], splineRT)

当我运行这个程序时,bispv抛出了不可理解的异常"ValueError:Invalid input data",这是对底层_fitpack返回的错误代码的响应_双水平函数。我对样条曲线的了解远远不够,不知道什么是无效的描述,但我确实研究了splineRT的值,它是:

[array([ 367.51732902,  367.51732902,  367.51732902,  367.51732902,
911.4739006 ,  911.4739006 ,  911.4739006 ,  911.4739006 ]),
array([ 1251.8868,  1251.8868,  1251.8868,  1251.8868,  1846.2027,
1846.2027,  1846.2027,  1846.2027]),
array([ -1.36687935e+04,   3.78197089e+04,  -6.83863404e+04,
-7.25568790e+04,   4.90004158e+04,  -1.11701213e+05,
2.02854711e+05,  -1.67569797e+05,  -7.22174063e+04,
1.27574330e+05,  -2.33080009e+05,   2.80073578e+05,
3.37054374e+04,   1.89380033e+04,  -1.81027026e+04,
-2.51210000e+00]),
3,
3]

让我印象深刻的是,前两个元素表示样条曲线中的"结",是八个元素,仅由两个唯一值组成,每个值重复四次。两个唯一值都来自相应的diffPoints列表,但diffPoints都是16个唯一元素。

这是怎么回事?和/或问题是这个还是别的?如有任何协助,我们将不胜感激。

编辑:这是从开始到结束的bug(?)的记录:https://www.dropbox.com/s/w758s7racfy9q4s/interpolationBug.txt。

根据我过去处理此问题的经验,features[0]features[1]必须按升序排序,bisplev才能工作。

最新更新