[SciPy-User] weighted griddata

Adam Ryan adamdryan@gmail....
Thu Sep 16 23:41:28 CDT 2010


Thanks to all for the input.  I'm a Python programmer trying to
understand the math I need.  My comments in line...

> So you have data
>
>        (x[i], y[i], t[i])
>
> and you'd like to fit a 2-D surface to it? I guess you used griddata to
> find the graph of the function y = f(x, t)?

Right, but griddata alone just fills in the grid, it doesn't return a
function, and as you rightly point out, only fills in and doesn't
smooth the original data.

> You may need to fiddle with the smoothing parameter `s=...` for
> SmoothBivariateSpline.

I was using interpolate.SmoothBivariateSpline previously and had good
results when it worked, but I struggled with the smoothing parameter
for so long I had to put it down.  I could not figure out how to
consistently calculate/estimate/predict a smoothing factor (from the
data) that was not too low (and never return) or too high (and give
blocky results).

Is there a way to calculate an optimal smoothing factor from a data set?

> Or, you can maybe fit a 1-D spline (UnivariateSpline) at each `t`
> separately, and use the smoothed results in griddata. The 1D spline
> routines are robust.

Tried that too, but that didn't really do the trick, since the actual
position of a point is more a function of the neighbors in time then
along shore, due to obstacles, etc.

> No, I tell a lie, the Clough-Tocher 2D spline could easily be used for
> weighed data smoothing. The only change needed would be to adjust the
> gradient estimation routine ...

Yea, that's what I was thinking, ha ha, I just don't know how.  Pointers?

> I think the rbf routines might be appropriate.

I've used the rbf routines to ortho-rectify our barrel-distorted
images (where the data comes from), but here the positional data is
not based around a center point.  Or maybe I don't understand the rbf
stuff fully.  How would I use weights with the rbf stuff?

> If you use the sqrt of the squares it is a Sobolev space due to the fact
> that the first derivative can be omitted. but there are lots of variations
> on this theme. Another is least squares with, say, lambda times the square
> of the second difference added to the normal squared deviation. That tends
> to keep the wiggles down but is very sensitive to lambda. There might even
> be an official name for that method, it goes back a long ways.

For clarification, all the points of a line have the same t value, but
each point has a weight of 0 to 1.  Would LSQBivariateSpline be any
better than SmoothBivariateSpline?  Again, the smoothing factor drove
me nuts.

- Adam


More information about the SciPy-User mailing list