Search code examples
pythonmatlaboctavelapack

How can I access a matlab/octave module from python?


I am looking for a way to access a matlab module from python. My current situation is this:

  • I have a python code that does numerical computations by calling Lapack routines while the memory is allocated as ctypes and passed as pointers to the Lapack routines.
  • I also have a matlab module, which is compatible with octave, that does some mathematical tricks I want to use.

My question now is this:
What is an efficient way to keep all the main work in python while at the same time exploit the possibilities that matlab/octave modules offer. Also it would be kind of nice, if my ctype arrays do not have to be converted into some other object in order to run octave. However, I can see that that last point is hard to accomplish.

My current research shows me two possible options:

  1. Pytave: However it seems that this packages is kind of pre alpha?!
  2. Go this humpy road: ctypes -> *.mat file (via numpy) -> octave -> *.mat file -> ctypes (via numpy)

Solution

  • Have you considered using OMPC, http://ompc.juricap.com/ ? I have used it with great success when not wishing to re-write some numerical linear algebra routines. I can imagine that the more esoteric the Matlab commands, the harder it would be to translate... but it might be worth a try. In the end, you're going to want to convert your Matlab code to Python because it will be a bottleneck on speed and performance. The only reason to leave the Matlab code in Matlab format is if it would be an enormous up-front cost to translate it all, which OMPC should mitigate somewhat. Otherwise, it's almost always worth that up-front cost to completely rid yourself of Matlab/Octave dependence.