[SciPy-User] Interpolation in 3D with interp2d

Pauli Virtanen pav@iki...
Wed Aug 4 14:21:32 CDT 2010

Sun, 01 Aug 2010 21:25:37 +0200, Jana Schulz wrote:
> I'm trying to interpolate a 3D data (from the pic attached) with the
> interp2d command. What I have, are three vectors f, z, A (x, y, z
> respectively, A is the percentage data given on the isolines). I first
> put the f and z in a meshgrid and afterwards pruduced a mesh with the A
> vector then started to interpolate. 

This sounds like you are trying to use `interp2d` for something it does 
not do -- it requires that your data is already gridded.

So let's clarify: you have points (f[i], z[i]), and function values A[i]. 
The points (f[i], z[i]) do not form a regular grid. If yes, then you 
almost certainly are looking for the `griddata` function:

>>> from matplotlib.mlab import griddata

Or possibly, you could also try to use splines:

>>> from scipy.intepolate import SmoothBivariateSpline
>>> int2d = SmoothBivariateSpline(f, z, A, s=0)
>>> intnew = int2d(ef, ez)

Mind the `s=0` -- otherwise it will try to smooth your data. However, if 
your data point distribution is irregular, the spline method will likely 
produce bad results -- they're OK for smoothing, but not so nice for data 

Pauli Virtanen

More information about the SciPy-User mailing list