For interpolation in python, scipy includes the interpolateackage containing (amongst other things) interp1d for simple interpolation.

The function does not however perform extrapolation; if the interpolator is asked for a value outside the original range it will raise an exception. To get around this, the interpolator contains a `.x`

parameter which contains the original `x`

values used to construct itself. A boolean index can then be used to reject inputoints which fall outside of this range:

```
# Create an interpolator object from the training dataset
interp = scipy.interpolate.interp1d(data_x, data_y)
# Boolean index array for data points falling within the
# training dataset range
ind = (new_x > interp.x.min()) & (new_x < interp.x.max())
# Finally create the new interpolated data, remembering
# to apply the index to the x data also
interpolated_x, interpolated_y = new_x[ind], interp(new_x[ind])
```