我在python中运行matlab代码时遇到问题。 当我运行我的简单代码时,我在matlab控制台中有这些信息:
未定义的函数或变量'messenger'。
matlabserver(第7行)messenger('init',socket_address);
中的错误
Matlab代码:
%% MATLAB
function lol = yourfunc(args)
arg1 = args.arg1;
arg2 = args.arg2;
lol = arg1 + arg2;
end
Python代码:
from pymatbridge import Matlab
mlab = Matlab()
mlab.start()
res = mlab.run('...path\yourfunc.m', {'arg1': 3, 'arg2': 5})
print(res['result'])
答案 0 :(得分:1)
所以作为OP问题的专用答案(最初有必要为windows 10重新编译mex文件 messenger.mexw64 [参见原帖发表评论] ):
好的,现在它有效,但我有问题,当我打印' res'在pycharm中,我有这个" {'结果':'','成功':错误,'内容':{ ' stdout':'输入参数太多。'}}"
在你的matlab函数中,你只说了一个论点:
function lol = yourfunc(args)
但是当你在python中调用它时,你用两个输入参数(arg1& arg2)调用它:
res = mlab.run('...path\yourfunc.m', {'arg1': 3, 'arg2': 5})
在matlab函数输入中,您假设它是一个至少包含两个字段的数据结构 arg1 &的 ARG2 强>;您在调用
时从结构中引用这些变量args.arg1
args.arg2
由于我不确定你是否可以传递数据结构这种技术(作为从python函数输入的JSON样式字符串),我建议将Matlab函数的输入参数更改为:
更改你的函数以支持两个参数,比如你如何从python中调用它:
%% MATLAB
function lol = yourfunc(input1,input2)
arg1 = input1;
arg2 = input2;
lol = arg1 + arg2;
end
# PYTHON (just to be clear)
from pymatbridge import Matlab
mlab = Matlab()
mlab.start()
res = mlab.run('...path\yourfunc.m', {'input1': 3, 'input2': 5})
print(res['result'])
或者,如果您想处理无限数量的输入(使用varargin):
%% MATLAB
function lol = yourfunc(varargin)
arg1 = varargin{1};
arg2 = varargin{2};
lol = arg1 + arg2;
end
# PYTHON (just to be clear)
from pymatbridge import Matlab
mlab = Matlab()
mlab.start()
res = mlab.run('...path\yourfunc.m', {'input1': 3, 'input2': 5})
print(res['result'])
然后应删除有关输入参数太多的错误消息并成功运行:)