[SciPy-user] 2d interpolation
Nils Wagner
nwagner at iam.uni-stuttgart.de
Thu Aug 2 02:54:09 EDT 2007
Michael Hearne wrote:
> All: I'm trying to use interp2d to replicate behavior in Matlab.
>
> The Matlab script:
> x = reshape(1:16,4,4)';
> xi = 1:0.5:4;
> yi = [1:0.5:4]';
> z = interp2(x,xi,yi,'linear')
>
> which results in the matrix:
> z =
>
> 1.0000 1.5000 2.0000 2.5000 3.0000 3.5000 4.0000
> 3.0000 3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
> 5.0000 5.5000 6.0000 6.5000 7.0000 7.5000 8.0000
> 7.0000 7.5000 8.0000 8.5000 9.0000 9.5000 10.0000
> 9.0000 9.5000 10.0000 10.5000 11.0000 11.5000 12.0000
> 11.0000 11.5000 12.0000 12.5000 13.0000 13.5000 14.0000
> 13.0000 13.5000 14.0000 14.5000 15.0000 15.5000 16.0000
>
> I had thought the following Python/numpy script would be equivalent,
> but it is not:
> from scipy.interpolate import interpolate
> from numpy.random import randn
> from numpy import *
>
> data = arange(16)
> data = data+1
> data = data.reshape(4,4)
> xrange = arange(4)
> yrange = arange(4)
> X,Y = meshgrid(xrange,yrange)
>
> outgrid = interpolate.interp2d(X,Y,data,kind='linear')
> xi = array([0,0.5,1,1.5,2,2.5,3])
> yi = xi
>
> z = outgrid(xi,yi)
>
> This results in the matrix:
> [[ 1. 1.10731213 2. 2.89268787 3.
> 3.25045605
> 4. ]
> [ 3. 2.57118448 4. 5.42881552 5.
> 4.90975947
> 6. ]
> [ 5. 4.03505682 6. 7.96494318 7.
> 6.56906289
> 8. ]
> [ 7. 5.49892917 8. 10.50107083 9.
> 8.22836631
> 10. ]
> [ 9. 6.96280152 10. 13.03719848 11.
> 9.88766973
> 12. ]
> [ 11. 8.42667386 12. 15.57332614 13.
> 11.54697315
> 14. ]
> [ 13. 9.89054621 14. 18.10945379 15.
> 13.20627657
> 16. ]]
>
> (Incidentally, is there a way to pretty-print arrays in numpy? The
> above is kind of ugly and hard to read)
>
You may use set_printoptions
Help on function set_printoptions in module numpy.core.arrayprint:
set_printoptions(precision=None, threshold=None, edgeitems=None,
linewidth=None,
suppress=None, nanstr=None, infstr=None)
Set options associated with printing.
:Parameters:
precision : int
Number of digits of precision for floating point output
(default 8).
threshold : int
Total number of array elements which trigger summarization
rather than full repr (default 1000).
edgeitems : int
Number of array items in summary at beginning and end of
each dimension (default 3).
linewidth : int
The number of characters per line for the purpose of inserting
line breaks (default 75).
suppress : bool
Whether or not suppress printing of small floating point values
using scientific notation (default False).
nanstr : string
String representation of floating point not-a-number
(default nan).
infstr : string
String representation of floating point infinity (default inf).
e.g.
set_printoptions(precision=4,linewidth=120)
More information about the SciPy-User
mailing list