美文网首页Matlabpython学习
【python】python调用matlab

【python】python调用matlab

作者: _CelesteHuang_ | 来源:发表于2016-10-04 11:01 被阅读3423次

    之前在博客园上总结的笔记,最近需要翻了出来,共享在简书上。

    update 2016.10.4
    转移到另一个环境使用mlabwrap的时候遇到很多问题。首先是mlabwrap要root权限,其次是import的时候提示`GLIBCXX_3.4.15' not found为此更新了GCC版本,最后在调用函数的时候又报错,眼瞎到没有理解是matlab脚本的错误,搜mlab的操作试了半天。经过对比python-matlab-bridge,我还是习惯用mlabwrap,前者启动需要权限,启动后机器就不能正常打印输出了,不知道是什么鬼。。

    环境:matlab2014b,mac os,python 2.7

    1. windows用户可以用win32com,COM只适用于WINDOWS系统,这里没有尝试。

    2. 如果是执行简单的命令,可以用matlab2014b提供的引擎,我的在/Applications/MATLAB_R2014b.app/extern/engines/python。

    Matlab Engine for Python

    Call Matlab Function from Python


    Step 1: Installation

    Install with Administrator Privileges

    cd "matlabroot\extern\engines\python"
    python setup.py install

    Install without Administrator Privileges

    cd "matlabroot\extern\engines\python"
    python setup.py build --build-base builddir install --install-base installdir

    Include 'installdir' in the search path for Python packages
    Add 'installdir' to the PYTHONPATH environment variavle


    Step 2: Using Matlab Engine

    Start and quit

    import matlab.engine
    eng = matlab.engine.start_matlab()
    eng.quit()

    Call Matlab Functions:

    Just call with form eng.xxx()

    the function xxx should in the namespace of matlab.

    Asynchronously Call

    import matlab.engine
    eng = matlab.engine.start_matlab()
    future = eng.sqrt(4.0,async=True)
    ret = future.result()
    print(ret)

    WorkSpace Usage:

    import matlab.engine
    eng = matlab.engine.start_matlab()
    eng.workspace['y'] = x
    a = eng.eval('sqrt(y)')
    print(a)

    Skills for unsupported features in python

    eng.eval()

    import matlab.engine
    eng = matlab.engine.start_matlab()
    eng.eval("T = readtable('patients.dat');",nargout=0)

    Plot With Matlab:

    import matlab.engine
    eng = matlab.engine.start_matlab()
    data = eng.peaks(100)
    eng.mesh(data)


    1. python直接调用执行matlab,现有很多工具:

    3.1. pymat

    没有python2.7的支持

    3.2. pymat2

    在pymat基础上改良过的。

    3.3. mlabwrap

    http://mlabwrap.sourceforge.net/

    需要用root权限。最初安装不成功,报OSError: [Errno 2] No such file or directory,应该是找不到MATLAB2014b的路径,更改PATH加上MATLAB的安装目录后成功(在setup.py中更改安装参数应该也可以,没有尝试)。export PATH=/Applications/MATLAB_R2014b.app/bin:$PATH

    from mlabwrap import mlab的时候又报import mlabraw引入不成功,google之后发现export DYLD_LIBRARY_PATH=/Applications/MATLAB_R2014b.app/bin/maci64:$DYLD_LIBRARY_PATH即可,

    这里runmodel.m文件内容是Function result = runmodel() ..... END

    调用方式为mlab.runmodel()

    解决方案参考了http://stackoverflow.com/questions/13311415/run-a-matlab-script-from-python-pass-args/13316939#13316939

    http://sourceforge.net/p/mlabwrap/mailman/message/26145026/

    传入参数:

    mlab.runmodel('[1,2,3,4,5]',...)注意参数必须为字符串,python会将其转换为各种形式。

    3.4. mlab

    貌似在mac上不稳定,执行不了后就放弃了。

    3.5. python-matlab-bridge

    https://github.com/jaderberg/python-matlab-bridge

    only work on unix, and is based on TCP transmission while messages are decoded in JSON format。

    3.6. Nipype

    http://nipy.sourceforge.net/nipype/api/generated/nipype.interfaces.matlab.html

    相关文章

      网友评论

        本文标题:【python】python调用matlab

        本文链接:https://www.haomeiwen.com/subject/mwgjyttx.html