Я установил mlab для запуска нескольких скриптов .m из python.
Я протестировал код из этого ответа, и он работает очень хорошо. Однако моя проблема начинается, когда я пытаюсь запустить скрипт с помощью команды запуска.
Вот все, что я пробовал.
foo.м
function sum = foo(a,b)
sum= a+b;
fprintf ('sum', sum);
test.py
from mlab.releases import latest_release as matlab
sum= matlab.run('foo.m',5,6)
print sum
Это дает ошибку
sum=matlab.run('foo.m',5,6)
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4
py2.7.egg\mlab\mlabwrap.py", line 607, in mlab_command
return self._do(name, *args, **update({'nout':nout}, kwargs))
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 542, in _do
handle_out(mlabraw.eval(self._session, cmd))
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabraw.py", line 67, in eval
matlab.eval(exp)
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\matlabcom.py", line 89, in eval
raise MatlabError(ret[begin:])
mlab.matlabcom.MatlabError: Error using run
Too many input arguments.
Затем я попытался передать аргументы в виде словаря как здесь.
function sum = foo(args)
a= args.a
b= args.b
sum= a+b;
fprintf ('sum', sum);
В питоне,
sum=matlab.run('foo.m',{'a':5,'b':6})
print sum
в результате ошибка,
sum=matlab.run('foo.m',{'a':5,'b':6})
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 607, in mlab_command
return self._do(name, *args, **update({'nout':nout}, kwargs))
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabwrap.py", line 534, in _do
mlabraw.put(self._session, argnames[-1], arg)
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\mlabraw.py", line 76, in put
matlab.put({var_name : val})
File "D:\Program_Files\python\lib\site-packages\mlab-1.1.4-
py2.7.egg\mlab\matlabcom.py", line 128, in put
self.client.PutWorkspaceData(name, 'base', val)
File "<COMObject matlab.application>", line 3, in PutWorkspaceData
TypeError: Objects of type 'dict' can not be converted to a COM VARIANT
После того, как мне совсем надоело, я решил запустить простой файл без каких-либо функций и аргументов.
foo.м
clear all;
fprintf('This is python calling matlab');
test.py
matlab.run('foo.m')
Это не дает мне ошибки, но я также не вижу ничего напечатанного.
Я не знаю, как действовать сейчас. Я попытался установить mlabwrap, как это предлагается в некоторых ответах, но сама установка не работает в Windows. Поскольку mlab был просто перепакованной версией, я думал, что она будет работать гладко. Я тщательно изучил все вопросы здесь, и ничего не помогло мне.
Итак, как запустить файл .m с помощью mlab? С аргументами еще лучше.
matlab.run
, а неmatlab.foo
?matlab.run
собирается выполнитьrun
, который принимает только один входной аргумент. Также прошли годы с момента последнего обновления mlab, возможно, вам следует указать Собственный Python-мост MATLAB попробуйте. - person excaza   schedule 06.09.2017matlab.foo
сейчас, снова нет результата. И ошибки тоже нет. Что касается моста Python, у меня нет прав администратора, и для установки чего-либо мне нужно связаться с ИТ и так далее, что, к сожалению, сейчас невозможно. - person gaya   schedule 06.09.2017sum
в качестве переменной в MATLAB. Скорее всего, это не ваша реальная проблема, но она может привести к тому, что вы запутаетесь сами и/или ваш компилятор! - person Wolfie   schedule 06.09.2017