Basically, is it possible to get scipy.ndimage.map_coordinates to return a multi-valued structure, instead of just a scalar? I’d like to be able to interpolate once to retrieve 5 values at a point, rather than having to interpolate 5 times.
Here’s my try at a MWE to demonstrate the problem. I’ll start with a 3D interpolation of a scalar. I won’t go between points for now because that’s not the point.
import numpy as np
from scipy import ndimage
coords = np.array([[1.,1.,1.]])
a = np.arange(3*3*3).reshape(3,3,3)
ndimage.map_coordinates(a,coords.T) # array([13.])
Now, suppose I want a to have pairs of values, not just one. My instinct is
a = np.arange(3*3*3*2).reshape(3,3,3,2)
a[1,1,1] # array([26.,27.])
ndimage.map_coordinates(a[:,:,:],coords.T) # I'd like array([26.,27.])
Instead of the desired output, I get the following:
RuntimeError Traceback (most recent call last)
(...)/<ipython-input-84-77334fb7469f> in <module>()
----> 1 ndimage.map_coordinates(a[:,:,:],np.array([[1.,1.,1.]]).T)
/usr/lib/python2.7/dist-packages/scipy/ndimage/interpolation.pyc in map_coordinates(input, coordinates, output, order, mode, cval, prefilter)
287 raise RuntimeError('input and output rank must be > 0')
288 if coordinates.shape[0] != input.ndim:
--> 289 raise RuntimeError('invalid shape for coordinate array')
290 mode = _extend_mode_to_code(mode)
291 if prefilter and order > 1:
RuntimeError: invalid shape for coordinate array
I can’t find a permutation of the shapes of any of the structures (a, coords, etc.) that gives me the answer I’m looking for. Also, if there’s a better way to do this than using map_coordinates, go ahead. I thought scipy.interpolate.interp1d might be the way to go but I can’t find any documentation or an inkling of what it might do…
That’s not possible, I think.
But tensor product interpolation is not difficult: