[SciPy-User] 2D interpolate issues

Mike Toews mwtoews@gmail....
Tue Mar 22 17:56:43 CDT 2011


I have a few questions regarding interpolate.interp2d, as I would like
to do some bilinear interpolation on 2D rasters. I'll illustrate my
issues with an example:

import numpy
from scipy import interpolate
x = [100, 110, 120, 130, 140]
y = [200, 210, 229, 230]
z = [[ 1, 2, 3, 4, 5],
     [12,13,14,15,16],
     [23,24,25,26,27],
     [34,35,36,37,38]]

First, why do I get an error with the following?
>>> f1 = interpolate.interp2d(x, y, z, kind='linear', bounds_error=True)
Warning:     No more knots can be added because the additional knot
would coincide
    with an old one. Probably cause: s too small or too large a weight
    to an inaccurate data point. (fp>s)
	kx,ky=1,1 nx,ny=8,4 m=20 fp=263.568959 s=0.000000

I do not get an error if I swap x, y:
>>> f2 = interpolate.interp2d(y, x, z, kind='linear', bounds_error=True)
but this is incorrect, as my z list of lists has 5 columns or x-values
and 4 rows or y-values.

Do I need to transpose my z?
za = numpy.array(z).T
f3 = interpolate.interp2d(x, y, za, kind='linear', bounds_error=True)

The example in http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.interp2d.html
does not use a transposed array. From the documented example, we can
see that intuitively len(x) = columns and len(y) = rows in z

Secondly, why does bounds_error do nothing?
>>> f3(-100,-100)
array([ 1.])
>>> f3(1000,1000)
array([ 38.])

I've supplied x and y values far outside the range, and I do not get
an error. Similarly, setting bounds_error=True, fill_value is not
returned when x and y are out of bounds, as documented.

Are these user errors or bugs?

Thanks,
-Mike


More information about the SciPy-User mailing list