[SciPy-user] 2D Interpolation

Pauli Virtanen pav@iki...
Fri Jun 27 15:13:21 CDT 2008


Fri, 27 Jun 2008 14:13:22 -0400, Ryan May wrote:
> Can anyone help me use scipy.interpolate correctly.  Here's my problem:
> I'm trying to make a 2D lookup table to save some calculations.  The two
> parameters over which the lookup table is generated are independent and
> I have complete control over how I divide up the domain.  Using this
> lookup table, I'd like to then calculate values over an unstructured set
> of parameter values (ie. a list of pairs of parameter values).  Is there
> a function in scipy.interpolate that can help here? What I'd really like
> to be able to do is generate an interpolator object from my 2D array,
> and then pass a pair of 1D arrays to the object and have it return 1D
> array of values.

I don't think there are currently any functions that do that, but 
certainly we'd like to have them.

I created a Scipy enhancement ticket for this feature:


Attached to it is a quick patch that implements the necessary loop on the 
Fortran side. I suspect the patch needs further work, as there possibly 
are faster ways to vectorise this piece of computation than simply 
calling fpbisp at each point separately. (If someone more familiar with 
the spline code wants to bless it, I can commit it, though...)

Currently, you can use

	spl = scipy.interpolate.RectBivariateSpline(xi,yi,zi)
	z = scipy.array([spl(xp, yp)[0,0] for xp, yp in zip(x, y)])

The Python overhead isn't as bad as it looks like; moving the loop to
the Fortran side gains only a factor of 5 improvement in speed.

Pauli Virtanen

More information about the SciPy-user mailing list