Python Forum
Python equivalent of Matlab code - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: Data Science (https://python-forum.io/forum-44.html)
+--- Thread: Python equivalent of Matlab code (/thread-25021.html)



Python equivalent of Matlab code - kwokmaster - Mar-15-2020

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!


RE: Python equivalent of Matlab code - scidam - Mar-16-2020

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.


RE: Python equivalent of Matlab code - kwokmaster - Mar-31-2020

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!


RE: Python equivalent of Matlab code - scidam - Apr-01-2020

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.


RE: Python equivalent of Matlab code - kwokmaster - Apr-01-2020

(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


RE: Python equivalent of Matlab code - scidam - Apr-03-2020

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,)).