2013-04-15 59 views
3

我試圖使用SciPy的UnivariateSpline來定位曲線上的點。不幸的是,我的結果是nan
這裏有一個小例子:Python SciPy UnivariateSpline返回NaN - 範圍內的值

from scipy.interpolate import UnivariateSpline 

spline = UnivariateSpline([0.6, 0.4, 0.2, 0.0], [-0.3, -0.1, 0.1, 0.3], w=None, bbox=[None, None], k=1, s=0) 
POINT = spline([0.15]) 
print POINT 

結果是[ NaN]
UnivariateSpline的哪個功能我錯過了?

我使用Python 2.6.6,並SciPy的版本0.7.2

我不能保證我一直不斷增加的數據點,從而interp可能不是一個選擇。

回答

8

docstring for UnivariateSpline所述,x中的值必須增加。如果您想使用UnivariateSpline,則必須對數據進行排序。例如。像這樣:

In [71]: x = np.array([0.6, 0.4, 0.2, 0.0]) 

In [72]: y = np.array([-0.3, -0.1, 0.1, 0.3]) 

In [73]: order = np.argsort(x) 

In [74]: spline = UnivariateSpline(x[order], y[order], w=None, bbox=[None, None], k=1, s=0) 

In [75]: spline([0.15]) 
Out[75]: array([ 0.15])