2010-02-13 31 views
22

一位朋友问我如何创建一个接受一些输入的小型Web界面,将它们发送到MATLAB进行数字运算并输出结果。我是一名Python/Django开发人员,所以我可以处理Web界面,但是在涉及到MATLAB时我毫无头绪。具体来说:如何从Python与MATLAB交互?

  • 我会真的喜欢避免托管在Windows服务器上。使用Windows上创建的脚本在Linux中运行MATLAB的任何问题?
  • 我是否应该考虑将shell命令或编译为C并使用​​与它进行交互?
  • 如果编译是要走的路,有什么我应该知道的关于如何编译和使用Python? (从C编译或使用已经很长时间了)

如何解决这个问题的任何建议,提示或技巧?

+7

请注意,这将违反MATLAB许可证。也许如果你在一所大学,你会摆脱它,但是对于MATLAB来说,你需要每个_end用户的许可证 - 也就是每个使用你的web界面的人。我试图设置一些计算Web服务,并且我们被告知这个要求 - 最后,我们不得不使用Matlab编译器来创建一个独立的可执行文件,它没有这个限制(或者完全切换到Python - Numpy/Scipy/Matplotlib提供一个相当全面的替代品)。 – robince 2010-02-13 10:57:37

回答

-1

也许你会找到有用的信息在这里

PyMat - An interface between Python and MATLAB

+2

-1 - 抱歉,但这是真的过时了,并将prob有困难让它建立(文档仍然指数字)... mlabwrap是要走的路(积极维护和与最近的matlab一起工作) – robince 2010-02-13 10:54:58

12

看看mlabwrap,它允许您通过一个Python API

+1

I second mlabwrap。虽然,我更喜欢像numpy这样的纯Python解决方案,但我目前使用mlabwrap从文件中读取一些数据,在Python中预处理它,然后发送到Matlab,然后获取结果。 每次发出请求时,您都可能在开始Matlab环境时遇到开销问题。 – 2010-02-13 10:57:43

+2

我也同意mlabwrap非常容易使用。但是,正如Amac所说,开销非常显着。为了说明这一点,我使用的一个计算(function optimization.lsqlin)从matlab中调用它需要0.01秒的时间,但是使用mlabwrap从python调用它时使用相同的参数,它需要0.30秒才能完成。 – Spike 2010-02-16 00:28:24

+0

该项目的延续:[mlab](https://github.com/ewiger/mlab) – gaborous 2016-03-25 13:37:41

1

调用Matlab的关于操作系统的兼容性,如果你使用的MATLAB版本对于Linux,用windows编写的脚本应该没有任何改变。 如果可能的话,你也可以考虑用python做所有事情的可能性。 Matiplotlib的Scipy/numpy提供了一个完整的Matlab替换。

14

有一个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