Python Forum

Full Version: Python equivalent of Matlab code
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
I am converting the interp2 function of matlab to python.
interp2

However, after searching through the equivalents like interpolate.interp2d, they all only allow 1-D array input, while my function requires a 2-D array input. I have no knowledge about interpolation and I can't handwrite an equivalent for it. It would be great if anyone can help.

Thank you in advance!
If you have a meshgrid data, e.g.
import numpy as np
# x, y -- 1D arrays
X, Y = np.meshgrid(x, y)
# Z is a matrix, 
you can always do

interpolate.interp2d(X.ravel(), Y.ravel(), Z.ravel())
Another option, that should also work, is
interpolate.interp2d(x, y, Z)
It seems (from the docs) that MatLab's interp2 and scipy's interp2d do not differ significantly.
Hi scidam, thanks for the reply!

I tried the way you mentioned like the following

ip = interpolate.interp2d(Ui,Vi,im,kind='linear')
out = ip(U,V)

where U,V is a 1000*1000 array and im is a 701*701 array.

Then I return with the following error:
ValueError: Invalid length for input z for non rectangular grid

As I have no idea about interpolation, what is this error about and how should I solve it?

Thank you!
I suspect that the problem is in the line ip = interpolate.interp2d(Ui,Vi,im,kind='linear'). Could you provide a minimal reproducible example? What are shapes of Ui, Vi? It is hard to answer without additional information.
(Apr-01-2020, 01:22 AM)scidam Wrote: [ -> ]I suspect that the problem is in the line ip = interpolate.interp2d(Ui,Vi,im,kind='linear'). Could you provide a minimal reproducible example? What are shapes of Ui, Vi? It is hard to answer without additional information.

The shapes of Ui and Vi are both 701*701
Here is minimal working example,

>>> from scipy.interpolate import interp2d
>>> import numpy as np
>>> x, y = np.random.rand(701), np.random.rand(701)
>>> z = np.random.rand(701, 701)
>>> inp = interp2d(x, y, z)
So, if you call
inp([1,2,3],[4,5,6])
you get a matrix of size 3x3 with values for all combinations of points.
Try to restructure U and V into 1D arrays (probably of shape (1000,)).