从 Python 中调用 MATLAB

2017-01-11

从 Python 中调用 MATLAB(当前使用版本:R2016a)可以有三种方法,以下详述

第一种方法:使用 Python 包做桥梁

第一种方法是安装 Python 相关包,通过包再调用 MATLAB。这种情况下通常需要运行环境安装有 MATLAB。事实上,这些包就相当于 Python 与 MATLAB 之间的桥梁,而且不同的包支持的 Python 版本也不同。

包的选择可以参考SO上的一个问题:Calling MATLAB functions from python

第二种方法:使用 MATLAB engine

除了使用 Python 中的包之外,其实 MATLAB 自身也提供了 engine,我们可以直接安装 engine,然后就可以在 Python 中调用了。注意这个方法仍然需要先安装 MATLAB。engine 支持 python2.7,3.3,3.4 和 3.5

安装 engine 过程参考:Install MATLAB Engine API for Python

需要的系统依赖参考:System Requirements for MATLAB Engine API for Python

安装 engine 后可以调用 MATLAB 函数以及脚本,参考这里: Call User Script and Function from Python 以及 Call MATLAB Functions from Python

这里描述了 MATLAB Engine API for Python

第三种方法:使用 MATLAB Compiler

第三种方法从 Python 调用MATLAB 的方法是使用 MATLAB Compiler。官网的说法是 MATLAB Compiler 可以以独立应用程序的形式分享 MATLAB 程序。这种方法适用于运行环境后没有安装 MATLAB 的情况。不过,这种方法只支持 Python2.7,3.3 或者 3.4。

虽然运行环境不需要 MATLAB,但是还需要 MATLAB Runtime, MATLAB Runtime 安装和配置过程请参考这里:Install and Configure the MATLAB Runtime

安装完成后,可以利用 MATLAB 中 APPS 的 Library Compiler 和 Application Compiler(需要使用 MATLAB Compiler 支持)对应用程序打包。

Application Compiler 将 MATLAB 代码打包成应用,在 Windows 是 exe 格式文件,而在 Linux 等则是可以运行的应用。这样只要有 MATLAB Runtime 就可以运行了。Library Compiler 则是 MATLAB 代码打包成对应语言的包,支持语言有 C/C++,Java,Python等。这里介绍了如何编译出一个简单 Python 的包:Compile Python Packages with Library Compiler App

Application Compiler vs Library Compiler

由 Application Compiler 打包的应用运行较简单。在 Linux 直接运行脚本并传入参数就可以了。缺点是无法获得函数返回结果,而且速度较慢(个人经验),优点是相对简单。

Library Compiler 则可以将 MATLAB 代码打包成 Python 包再安装,这样就可以在直接调用了。方便复用和定制。缺点是坑太多,经常有找不到依赖的情况(个人经验)