Question

I realize that there is a griddata for NumPy via Matplotlib, but is there a griddata3 (same has griddata, but for higher dimensions)?

In other words, I have (x,y,z,d(x,y,z)) where (x,y,z) form an irregular grid and d(x,y,z) is a scalar function of three variables. I need to generate d(xi, yi, zi) for a new set of (xi, yi, zi) points using some kind of interpolation that can handle the non-uniformity of the original (x,y,z) data.

Ultimately, the (xi, yi, zi, d(xi, yi, zi)) data will have to be rendered as a surface somehow, but that's a problem for later. I also do not have an analytical form for the d(.) function; I just have data for it.

Was it helpful?

Solution

SciPy 0.9 (at the moment, a first beta is out) has a new griddata function that can handle N-dimensional data.

OTHER TIPS

Not sure how you intend to render a surface of a scalar function of 3 variables, except perhaps using cutplanes or something similar. Mayavi (really VTK which powers Mayavi) has support for efficient Delaunay triangulation via enthought.mayavi.mlab.pipeline.delaunay3d, which is the core of the algorithm used by griddata3. See the 2D example code they have posted, just add one dimension (and use delaunay3d instead). I don't know of a way to explicitly get the interpolated values used to render the surface, but there might be a way to sample it through Mayavi, you could dig through the documentation or ask on one of the Enthought mailing lists.

Alternatively, one of the C functions in the NCAR natgrid library may be useful i.e. dsgrid3d. There is a partial wrapper implemented as a matplotlib toolkit.

I am not familiar with griddata3, but you might want to look into meshgrid and this related post.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top