在python中运行matlab脚本 - 错误

时间:2018-02-02 00:52:15

标签: python matlab

我在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'])

1 个答案:

答案 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函数的输入参数更改为:

  1. 更改你的函数以支持两个参数,比如你如何从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'])
    
  2. 或者,如果您想处理无限数量的输入(使用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'])
    
  3. 然后应删除有关输入参数太多的错误消息并成功运行:)