2016-05-04 18 views
2

Die docs in scipy.interpolate.interp1d (v0.17.0) folgendes sagen für die optionale fill_value Argument:Hindurchleiten eines Tupels in scipy.interpolate.interp1d Ergebnisse in Valueerror fill_value

fill_value : ... If a two-element tuple, then the first element is used as a fill value for x_new < x[0] and the second element is used for x_new x[-1].

So passieren I a zwei-Element tupe in diesem Code:

N=100 
x=numpy.arange(N) 
y=x*x 
interpolator=interp1d(x,y,kind='linear',bounds_error=False,fill_value=(x[0],x[-1])) 
r=np.arange(1,70) 
interpolator(np.arange(1,70)) 

Aber es wirft Valueerror:

ValueError: shape mismatch: value array of shape (2,) could not be broadcast to indexing result of shape (0,1) 

Kann mir bitte jemand zeigen, was mache ich hier falsch? Vielen Dank im Voraus für jede Hilfe.

Antwort

4

Es ist ein Fehler, der in der aktuellen Entwickler-Version behoben wurde:

>>> N = 100 
>>> x = np.arange(N) 
>>> y = x**2 
>>> from scipy.interpolate import interp1d 
>>> iii = interp1d(x, y, fill_value=(-10, 10), bounds_error=False) 
>>> iii(-1) 
array(-10.0) 
>>> iii(101) 
array(10.0) 
>>> scipy.__version__ 
'0.18.0.dev0+8b07439' 

aber sagen, dass, wenn alles, was Sie linken und rechten Seiten ist wollen, eine lineare Interpolation mit fill Werte für Sie kann np.interp direkt verwenden.

+0

Danke eine Million, und mir war np.interp nicht bekannt – jmborr