插值问题
import re
from decimal import *
import numpy
from scipy.signal import cspline1d, cspline1d_eval
import scipy.interpolate
import scipy
import math
import numpy
from scipy import interpolate
Y1 =[0.48960000000000004, 0.52736099999999997, 0.56413900000000006, 0.60200199999999993, 0.64071400000000001, 0.67668399999999995, 0.71315899999999999, 0.75050499999999998, 0.61494199999999999, 0.66246900000000009]
X1 =[0.024, 0.026000000000000002, 0.028000000000000004, 0.029999999999999999, 0.032000000000000001, 0.034000000000000002, 0.035999999999999997, 0.038000000000000006, 0.029999999999999999, 0.032500000000000001]
rep = scipy.interpolate.splrep(X1,Y1)
在上面的代码中,我遇到了一个错误
Traceback (most recent call last):
File "/home/vibhor/Desktop/timing_tool/timing/interpolation_cap.py", line 64, in <module>
rep = scipy.interpolate.splrep(X1,Y1)
File "/usr/lib/python2.6/site-packages/scipy/interpolate/fitpack.py", line 418, in splrep
raise _iermess[ier][1],_iermess[ier][0]
ValueError: Error on input data
不知道发生了什么
2 个回答
1
X值0.029999999999999999出现了两次,但对应的Y坐标却不同。如果在尝试拟合一个多项式样条段时出现问题,我一点也不觉得奇怪……
13
我觉得问题出在X1的值没有从小到大排列,而且还有一个重复的x点。也就是说,在使用splrep之前,你需要先把X1和Y1的值排序,并去掉重复的值。
根据文档,splrep是对FITPACK库的低级访问,它需要一个已经排序且没有重复的列表,所以才会报错。
虽然interpolate.interp1d看起来可以用,但你真的试过用它来找一个新点吗?我想你会发现当你调用它的时候,比如说rep(2),会出现错误。