>> Hi, >> >> I want to interpolate (with quadratic splines) a stack of 2D-arrays/matrices >> y1, y2, y3, ... in a third dimension (which I call x) e.g. for crossfading >> images. I already have a working code which unfortunately still contains two >> explicit loops over the rows and colums of the matrices. Inside these loops >> I >> simply use 'interp1d' from scipy suitable for 1D-interpolations. Is anybody >> here aware of a better, more efficient solution of my problem? Maybe >> somewhere out there a compiled routine for my problem already exists in a >> python library... :-)
> Since numpy arrays make it so easy to form linear combinations of > arrays without loops I would probably eliminate the loops and just > form the appropriate combinations of the image arrays. For example, to > use linear interpolation you could do: > > > > def interp_frames_linear(times, frames, t): > > '''times is a vector of floats > > frames is a 3D array whose nth page is the image for time t[n] > > t is the time to interpolate for > > ''' > > # Find the two frames to interpolate between > > # Probably a better way of doing this > > for n in range(len(t)-1): > > if times[n] <= t < times[n+1]: > > break > > else: > > raise OutOfBoundsError > > > > # Interpolate between the two images > > alpha = (t - times[n]) / (times[n+1] - times[n]) > > return (1 - alpha) * frames[:, :, n] + alpha * frames[:, :, n+1] > > > > I'm not really sure how quadratic interpolation is supposed to work > (I've only ever used linear and cubic) but you should be able to do > the same sort of thing. > > Oscar Indeed, the 'manual' reimplementation of the interpolation formula using numpy arrays significantly sped up the code. The numexpr package made it even faster. Thanks a lot for your advice! Raphael -- http://mail.python.org/mailman/listinfo/python-list