如何从Python与MATLAB交互?

如何从Python与MATLAB交互?,python,matlab,ctypes,Python,Matlab,Ctypes,一位朋友问我如何创建一个小型web界面,该界面接受一些输入,将它们发送到MATLAB进行数字运算并输出结果。我是一名Python/Django开发人员,所以我可以处理web界面,但对于MATLAB我一无所知。具体而言: 我想真的想避免在Windows服务器上托管这个。使用Windows上创建的脚本在Linux中运行MATLAB有什么问题吗 我是否应该研究出命令或将其编译为C并使用ctypes与之交互 如果编译是一条必由之路,那么关于如何编译它并在Python中工作,我应该知道些什么吗?(我已经

一位朋友问我如何创建一个小型web界面,该界面接受一些输入,将它们发送到MATLAB进行数字运算并输出结果。我是一名Python/Django开发人员,所以我可以处理web界面,但对于MATLAB我一无所知。具体而言:

  • 我想真的想避免在Windows服务器上托管这个。使用Windows上创建的脚本在Linux中运行MATLAB有什么问题吗
  • 我是否应该研究出命令或将其编译为C并使用
    ctypes
    与之交互
  • 如果编译是一条必由之路,那么关于如何编译它并在Python中工作,我应该知道些什么吗?(我已经很久没有编译或使用C了)

关于如何实现这一点,您有什么建议、技巧或窍门吗?

看看哪一个允许您通过python API调用Matlab

关于操作系统兼容性,如果您使用Linux的Matlab版本,在windows中编写的脚本应该可以正常工作,而不需要任何更改。 如果可能的话,你也可以考虑用Python做任何事情的可能性。Scipy/numpy和Matplotlib提供了一个完整的Matlab替代品。

有一个独特之处,即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

另一种选择是,由于Matlab R2014b,因此提供了一个Python库,使用.

从Python调用Matlab。请注意,这将违反Matlab许可证。如果你在一所大学里,你可能会侥幸逃脱,但是对于MATLAB来说,你需要为每个最终用户(即所有将要使用你的web界面的人)提供许可证。我试图设置一些计算web服务,我们被告知这一要求——最后我们不得不使用Matlab编译器创建一个没有此限制的独立可执行文件(或者完全切换到Python——Numpy/Scipy/Matplotlib提供了一个相当全面的替代品)。虽然我更喜欢像numpy这样的纯Python解决方案,但我目前正在使用mlabwrap从文件中读取一些数据,用Python对其进行预处理,然后发送到Matlab,然后得到结果。每次有请求时启动Matlab环境可能会有开销问题。我也同意mlabwrap非常容易使用。然而,正如Amac所说,开销是相当大的。为了说明这一点,我使用的一个计算(function optimization.lsqlin)在从matlab调用它时需要0.01秒才能完成,但在使用mlabwrap从python使用相同参数调用它时需要0.30秒才能完成。