Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Vector-valued function interpolation using NumPy/SciPy

Is there a way to interpolate a vector-valued function using NumPy/SciPy?

There are plenty of offerings that work on scalar-valued functions, and I guess I can use one of those to estimate each component of the vector separately, but is there a way to do it more efficiently?

To elaborate, I have a function f(x) = V, where x is scalar and V is a vector. I also have a collection of xs and their corresponding Vs. I would like to use it to interpolate and estimate V for an arbitrary x.

like image 841
ktdrv Avatar asked Jun 21 '12 00:06

ktdrv


People also ask

What is interpolation in Scipy?

Interpolation is a technique of constructing data points between given data points. The scipy. interpolate is a module in Python SciPy consisting of classes, spline functions, and univariate and multivariate interpolation classes.

What is interp1d in Python?

The interp1d() function of scipy. interpolate package is used to interpolate a 1-D function. It takes arrays of values such as x and y to approximate some function y = f(x) and then uses interpolation to find the value of new points.

What does Scipy interpolate interp2d return?

This class returns a function whose call method uses spline interpolation to find the value of new points.


1 Answers

The interpolation function scipy.interpolate.interp1d also works on vector-valued data for the interpolant (not for vector-valued argument data though). Thus, as long as x is scalar, you can use it directly.

The following code is a slight extension of the example given in the scipy documentation:

>>> from scipy.interpolate import interp1d
>>> x = np.linspace(0, 10, 10)
>>> y = np.array([np.exp(-x/3.0), 2*x])
>>> f = interp1d(x, y)
>>> f(2)
array([ 0.51950421,  4.        ])
>>> np.array([np.exp(-2/3.0), 2*2])
array([ 0.51341712,  4.        ])

Note that 2 is not in the argument vector x, thus the interpolation error for the first component in y in this example.

like image 138
silvado Avatar answered Sep 23 '22 08:09

silvado