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.
1
2
3
4
import numpy as np
# x, y -- 1D arrays
X, Y = np.meshgrid(x, y)
# Z is a matrix,
you can always do

1
interpolate.interp2d(X.ravel(), Y.ravel(), Z.ravel())
Another option, that should also work, is
1
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,

1
2
3
4
5
>>> 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
1
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 2,192 Feb-03-2023, 01:04 PM
Last Post: jefsummers
  Convolution "same" in Python doesn't work as Matlab claw91 4 5,129 Oct-01-2020, 08:59 AM
Last Post: claw91
  Is there similar function to lsqnonlin (in matlab) in python? Jay_Nerella 1 7,319 Nov-11-2019, 08:40 AM
Last Post: feli_x
  Matlab to Python Ariane 6 8,865 Jun-14-2018, 12:08 PM
Last Post: Ariane
  How to use .m matlab file in python ? sameer 5 17,170 May-10-2018, 09:39 AM
Last Post: wavic
  What is the equivalent python code for c program? nvnkumrawat 10 7,777 Jan-09-2018, 07:22 PM
Last Post: Windspar
  Importing matlab cell array (.mat) into a python list scanato 0 9,535 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