【问题标题】:How do I interact with MATLAB from Python?如何从 Python 与 MATLAB 交互?
【发布时间】: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提供一个相当全面的替代品)。

标签: python matlab ctypes


【解决方案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 替代品。

      【讨论】:

        猜你喜欢
        • 2021-01-08
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 2012-03-29
        • 2016-11-15
        • 2019-02-27
        • 2011-03-12
        • 2011-01-17
        相关资源
        最近更新 更多