[Matlab in python] Does matlab engine supports a .m file whose input is a function handle?
3 views (last 30 days)
Show older comments
Hi all, I want to use matlab.engine to run .m file.
To make an easy explanation, lets assume I have my_fun.m file with
function res = my_fun(f)
res = f(0)
end
Here f is (or could be) a function hadle like
f = @(x) sin(x)
Now to run this file in python, I should run
import matlab.engine
eng = matlab.engine.start_matlab()
eng.my_fun(nargout=1)
Of course, this code returns an 'lack-of-input' error. How do I input a function handle f into the third line of the code?
Moreover, I ultimately want to do the following:
Is there a way to input a 'python function' like
import numpy as np
def f(x):
return np.sin(x)
?
Answers (1)
Mike Croucher
on 24 Jan 2024
Unfortunately, the MATLAB Engine for python does not support passing Python functions to MATLAB. Running the following in Python:
import matlab.engine
eng = matlab.engine.start_matlab()
import numpy as np
def f(x):
return np.sin(x)
eng.my_fun(f)
gives
---------------------------------------------------------------------------TypeError Traceback (most recent call last) Cell In[11], line 1----> 1 eng.my_fun(f)File ~\AppData\Local\Programs\Python\Python310\lib\site-packages\matlab\engine\matlabengine.py:64, in MatlabFunc.__call__(self, *args, **kwargs) 61 _stderr_info = '{0}.{1}'.format(_stderr.__class__.__module__, _stderr.__class__.__name__); 62 raise TypeError(pythonengine.getMessage('StderrMustBeStringIO', _sIO_info, _stderr_info)) ---> 64 future = pythonengine.evaluateFunction(self._engine()._matlab, 65 self._name, nargs,args, 66 out=_stdout, err=_stderr) 67 if background: 68 return FutureResult(self._engine(), future, nargs, _stdout, _stderr, feval=True)
TypeError: unsupported Python data type: function
So, we are unable to get a Python function from Python into MATLAB. Even if we could, we'd need to do something different in my_fun.m I think.
I'll raise this as a feature request with development. Can I ask why you need to do this please? Having a solid application can help set priorities.
0 Comments
See Also
Categories
Find more on Call MATLAB from Python in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!