Effacer les filtres
Effacer les filtres

Using MATLAB Engine API for Python

20 vues (au cours des 30 derniers jours)
Ankita Tondwalkar
Ankita Tondwalkar le 27 Mar 2022
I have a variable A= 25 (1X1 double) in my MATLAB workspace and I am using the MATLAB Engine API to call it in python by using the following code.
import matlab.engine
eng = matlab.engine.start_matlab()
var = eng.workspace['A']
print(var)
I am getting the following error message:
Error using matlab.internal.engine.getVariable
Undefined variable 'A'.
Traceback (most recent call last):
File "readingdata.py", line 20, in <module>
test = eng.workspace['A']
File "/usr/local/lib/python3.8/dist-packages/matlab/engine/matlabengine.py", line 120, in __getitem__
future = _method(attr)
File "/usr/local/lib/python3.8/dist-packages/matlab/engine/matlabengine.py", line 70, in __call__
return FutureResult(self._engine(), future, nargs, _stdout,
File "/usr/local/lib/python3.8/dist-packages/matlab/engine/futureresult.py", line 67, in result
return self.__future.result(timeout)
File "/usr/local/lib/python3.8/dist-packages/matlab/engine/fevalfuture.py", line 82, in result
self._result = pythonengine.getFEvalResult(self._future,self._nargout, None, out=self._out, err=self._err)
matlab.engine.MatlabExecutionError:
File /usr/local/MATLAB/R2022a/toolbox/matlab/external/engines/engine_api/+matlab/+internal/+engine/getVariable.m, line 27, in getVariable
Undefined variable 'A'.
I could do the same using scipy.io
Is there something I am missing?

Réponses (1)

Kojiro Saito
Kojiro Saito le 28 Mar 2022
It's because engine.start_matlab launches a new MATALB session and there's no variable in workspace.
You need to create a session to a running MATLAB as described in this document.
In MATLAB, you need to call matlab.engine.shareEngine.
[MATLAB side]
A = 25;
matlab.engine.shareEngine
Then, you need to create a session from Python using engine.connect_matlab not engine.start_matlab.
[Python side]
import matlab.engine
eng = matlab.engine.connect_matlab()
var = eng.workspace['A']
print(var)
  11 commentaires
Ankita Tondwalkar
Ankita Tondwalkar le 4 Mai 2022
This problem resulted from that fact how indexing works differenty in MATLAB and Python. I made sure while callig in Python I followed the indexing rule for Python.
Ankita Tondwalkar
Ankita Tondwalkar le 26 Sep 2022
Hello,
I am trying to access predefined enviromen ("BasicGridWorld") variable, obsInfo and actInfo present in MATLAB workspace in Python.
While doing so, I am able to find my MATLAB session but unable to connect to it.
In my Python terminal I am getting the following error:
matlab.engine.EngineError: Unable to connect to MATLAB session 'MATLAB_3052'.
In MATLAB I am using the share engine command (but I get the error that "The current MATLAB session is shared already")while in Python I have the matlab.engine.connect_matlab(). Can anyone let me know if I am missing something?
Thanks,
Ankita

Connectez-vous pour commenter.

Catégories

En savoir plus sur Call MATLAB from Python dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by