2013-04-15 3 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의 어떤 기능을 놓쳤습니까? 나는 내가 항상 interp가 대안이 될하지 않을 수 있습니다 데이터 포인트 증가했다고 보장 할 수 없습니다 파이썬 2.6.6와 scipy 버전 0.7.2

을 사용하고

.

답변

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]) 
관련 문제