如何从 Python 与 MATLAB 交互?
Posted
技术标签:
【中文标题】如何从 Python 与 MATLAB 交互?【英文标题】:How do I interact with MATLAB from Python? 【发布时间】:2011-01-16 09:21:52 【问题描述】:一位朋友问我关于创建一个小型 Web 界面,该界面接受一些输入,将它们发送到 MATLAB 进行数字运算并输出结果。我是一名 Python/Django 开发人员,所以我可以处理 Web 界面,但对于 MATLAB,我一无所知。具体来说:
我真的希望避免将其托管在 Windows 服务器上。使用在 Windows 上创建的脚本在 Linux 中运行 MATLAB 是否有任何问题? 我是否应该研究出命令或将其编译为 C 并使用ctypes
与之交互?
如果编译是要走的路,关于如何编译它并在 Python 中工作,我应该知道什么吗? (我已经很长时间没有编译或使用 C 语言了)
关于如何实现这一点的任何建议、提示或技巧?
【问题讨论】:
请注意,这将违反 MATLAB 许可证。也许如果你在大学里,你会侥幸成功,但对于 MATLAB,你需要为每个最终用户——即使用你的网络界面的每个人——提供一个许可证。我试图设置一些计算网络服务,我们被告知这个要求 - 最后我们不得不使用 Matlab 编译器来创建一个没有这个限制的独立可执行文件(或完全切换到 Python - Numpy/Scipy/Matplotlib提供一个相当全面的替代品)。 【参考方案1】:作为替代方案,从 Matlab R2014b 开始,提供了一个 Python 库,用于使用 MATLAB Engine API for Python 从 Python 调用 Matlab。
【讨论】:
【参考方案2】:看看mlabwrap,它允许您通过python API调用Matlab
【讨论】:
我第二次使用 mlabwrap。虽然,我更喜欢像 numpy 这样的纯 Python 解决方案,但我目前正在使用 mlabwrap 从文件中读取一些数据,在 Python 中对其进行预处理并将其发送到 Matlab,然后得到结果。每次请求到来时,您可能会遇到启动 Matlab 环境的开销问题。 我也同意 mlabwrap 非常容易使用。但是,正如 Amac 所说,开销非常大。为了给出一些数字,我正在使用的计算(函数优化.lsqlin)在从 matlab 调用它时需要 0.01 秒才能完成,但是当使用 mlabwrap 从具有相同参数的 python 调用它时,它需要 0.30 秒才能完成。 【参考方案3】:有一个 python-matlab bridge 是独一无二的,因为 Matlab 作为服务器在后台运行,因此您每次调用 Matlab 函数时都没有启动成本。
就像下载和下面的代码一样简单:
from pymatbridge import Matlab
mlab = Matlab(matlab='/Applications/MATLAB_R2011a.app/bin/matlab')
mlab.start()
res = mlab.run('path/to/yourfunc.m', 'arg1': 3, 'arg2': 5)
print res['result']
yourfunc.m 的内容是这样的:
%% MATLAB
function lol = yourfunc(args)
arg1 = args.arg1;
arg2 = args.arg2;
lol = arg1 + arg2;
end
【讨论】:
【参考方案4】:关于操作系统的兼容性,如果你使用 Linux 的 matlab 版本,用 windows 编写的脚本应该可以在没有任何更改的情况下运行。 如果可能的话,你也可以考虑用 python 做所有事情的可能性。带有 Matplotlib 的 Scipy/numpy 提供了一个完整的 Matlab 替代品。
【讨论】:
以上是关于如何从 Python 与 MATLAB 交互?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用与同一数据库交互的外部 python 包来构建 Django 项目