Skip to content

Examples: Matlab Engine from Python and Matlab calling Python

License

Notifications You must be signed in to change notification settings

scivision/matlab-engine-python

Repository files navigation

Matlab Engine for Python

This repo gives examples of calling Matlab functions from Python using Matlab Engine for Python and also examples of Matlab Interface to Python. Compatible versions of Python and Matlab are required for either interface.

Install necessary packages for these examples:

conda install --file requirements.txt

# OR
python -m pip install -r requirements.txt

Python can directly exchange data with Matlab and call Matlab functions via Matlab Engine for Python. Setup Matlab Engine for Python:

python -m pip install matlabengine

Or install directly from Matlab directory like:

python -m pip install $(matlab -batch "disp(matlabroot)" | tail -n1)/extern/engines/python/

Article explains more details of Matlab Engine for Python.

Numpy.ndarray return from Matlab

Matlab Engine accepts Numpy.ndarray into Matlab functions. Getting Numpy.ndarray from Matlab Engine returned arrays requires like:

import numpy
import matlab.engine
eng = matlab.engine.start_matlab("-nojvm")

x = numpy.random.random((3,2))

y_m = eng.my_matlab_fun(x)

y = numpy.array(y_m.tomemoryview()).reshape(y_m.size, order="F")

Matlab functions with more than one output

For Matlab functions that return more than one output, use "nargout=" like:

import matlab.engine
eng = matlab.engine.start_matlab("-nojvm")

x, y = eng.myfun(x, nargout=2)

Data file exchange

The Python pickle module can save and load data to/from files. While standard file formats such as HDF5 should be used instead of pickle, Matlab can read / write Pickle data using the Matlab Interface to Python.

Example of write / read Python pickle data from Matlab.

HDF5

To avoid using Matlab Engine, which requires compatible versions of Python and Matlab, one can interchange data using a file and calling the other language interpreter.

Example: image_hdf5.py calls Matlab function image_hdf5.m.

Matlab Engine example: image_matlab_engine.py.

Matlab using Python

Matlab can use Python code via pyenv.

Example: image_proc.m.

Troubleshooting

Numpy import issues

check_numpy.m shows how to check issues with DLLs on Windows with Numpy and Matlab.

Python importlib can also give hints about problems importing:

py.importlib.import_module('numpy')

Other things to try especially on Windows include:

setenv("KMP_DUPLICATE_LIB_OK", "TRUE")

this avoids Matlab crash below--is this error from Matlab libiomp5md.dll loaded and Numpy also loads that DLL?

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

About

Examples: Matlab Engine from Python and Matlab calling Python

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Releases

No releases published