Python Forum
Python equivalent of Matlab code
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Python equivalent of Matlab code
#1
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!
Reply
#2
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.
Reply
#3
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!
Reply
#4
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.
Reply
#5
(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
Reply
#6
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,)).
Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  problem of converting Matlab code to python DongyanZ 2 1,376 Feb-03-2023, 01:04 PM
Last Post: jefsummers
  Convolution "same" in Python doesn't work as Matlab claw91 4 3,683 Oct-01-2020, 08:59 AM
Last Post: claw91
  Is there similar function to lsqnonlin (in matlab) in python? Jay_Nerella 1 5,879 Nov-11-2019, 08:40 AM
Last Post: feli_x
  Matlab to Python Ariane 6 6,995 Jun-14-2018, 12:08 PM
Last Post: Ariane
  How to use .m matlab file in python ? sameer 5 15,288 May-10-2018, 09:39 AM
Last Post: wavic
  What is the equivalent python code for c program? nvnkumrawat 10 5,846 Jan-09-2018, 07:22 PM
Last Post: Windspar
  Importing matlab cell array (.mat) into a python list scanato 0 8,600 Nov-15-2017, 11:04 AM
Last Post: scanato

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020