2010-01-05 134 views
6
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 

不知道發生了什麼

回答

1

X值0.029999999999999999出現了兩次,有兩個不同的Y座標。它不會 驚訝我,如果導致試圖將多項式樣條段的問題....

+0

但如果我使用interpolate.interp1d那麼它的工作原理沒有錯誤我做錯了什麼 – VASUDEVAN 2010-01-05 22:26:57

10

我相信這是由於不被責令從最小到最大也加你有一個重複的X點X1值,也就是說,您需要對X1和Y1的值進行排序,然後才能使用splrep並刪除重複項。從文檔

splrep似乎是低級別的訪問FITPACK這需要一個排序,不重複的列表,這就是爲什麼它返回一個錯誤

interpolate.interp1d似乎工作庫,但你實際上試圖用它來尋找新的點?我想你會發現一個錯誤,當你打電話它,即代表(2)

+1

[在線文檔](http:// www.netlib.org/dierckx/percur.f)確實說:**這些值必須嚴格按升序排列。** – Tim 2013-06-13 15:59:26