从python调用MATLAB函数

时间:2010-05-21 15:01:24

标签: python matlab visual-c++

是否可以在Python中运行MATLAB函数? 我搜索互联网,我只能找到PyMat。坏的是编译版本只支持Python2.2,我使用的是2.6。所以我尝试下载源代码,所以我可以自己编译。但我无法编译它,VC ++ express似乎没有必要的功能来编译它。有没有人有PC的编译版本? 或任何替代PyMat? 感谢

10 个答案:

答案 0 :(得分:33)

我知道这是一个老问题,已经得到了解答。但我正在寻找相同的东西(对于Mac),并发现有很多选项可以使用不同的方法与matlab进行交互,并且有不同的成熟度。这是我发现的:

pymat

Matlab的低级接口,使用matlab引擎(libeng)进行通信(基本上是matlab附带的库)。该模块必须编译并与libeng链接。

http://pymat.sourceforge.net
上次更新时间:2003年

pymat2

pymat发展的短暂延续。似乎可以在Windows(包括64位),linux和mac上工作(有一些更改)。

https://code.google.com/p/pymat2/
上次更新时间:2012年

mlabwrap

高级接口,也是一个需要编译和链接libeng的模块。它将Matlab函数暴露给python,因此你可以做一些有趣的事情,比如

mlab.plot(x, y, 'o')

http://mlabwrap.sourceforge.net
上次更新时间:2009年

MLAB

mlabwrap的重新包装工作。基本上它取代了链接&#lib; libeng'的c ++代码。在 mlabwrap 中使用python模块(matlabpipe)通过管道与matlab通信。这样做的主要优点是它不需要任何类型的编译。

不幸的是,这个软件包目前有一些bug,而且似乎根本无法在mac上运行。我报告了其中一些但最终放弃了。此外,如果你需要进入源代码,请准备好大量的诡计和一堆非常丑陋的黑客;-)如果这变得更加成熟,它可能是最好的选择之一。

https://github.com/ewiger/mlab
上次更新时间:2013年

pymatlab

更新的包(2010),它还通过libeng与Matlab交互。与其他软件包不同,这个软件包通过ctypes加载引擎库,因此无需编译。它不是没有瑕疵,但仍在维护,我发现的(64位Mac特定)问题应该很容易修复 (编辑2014-05-20 :似乎这些问题已在源代码中得到修复,因此0.2.4应该没问题)

http://pymatlab.sourceforge.net
最后更新:2014

蟒-MATLAB桥

还是一个仍在积极维护的新包。通过某种套接字与Matlab进行通信。不幸的是,暴露的功能有点受限。我无法弄清楚如何调用一个以结构为参数的函数。需要zmq,pyzmq和IPython,这些都很容易安装。

http://arokem.github.io/python-matlab-bridge
最后更新:2014

答案 1 :(得分:29)

另一个选项是Mlabwrap

  

Mlabwrap是Matlab®桥的高级python,它让Matlab看起来像一个普通的python库。

适用于numpy数组。主页上的一个例子:

>>> from mlabwrap import mlab; from numpy import *
>>> xx = arange(-2*pi, 2*pi, 0.2)
>>> mlab.surf(subtract.outer(sin(xx),cos(xx)))

答案 2 :(得分:25)

PyMat看起来已被抛弃。

我假设你在Windows上,所以你总能做最简单的方法并使用Matlab的COM接口:

>>> import win32com.client
>>> h = win32com.client.Dispatch('matlab.application')
>>> h.Execute ("plot([0 18], [7 23])")
>>> h.Execute ("1+1")
u'\nans =\n\n     2\n\n'

更多信息here

答案 3 :(得分:9)

有一个python-matlab桥,它在Matlab在后台运行的意义上是独一无二的,因此每次调用Matlab函数时都没有启动成本。 https://github.com/jaderberg/python-matlab-bridge

就像下载和以下代码一样简单:

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']

你的func.m的内容是这样的:

%% MATLAB
function lol = yourfunc(args)
    arg1 = args.arg1;
    arg2 = args.arg2;
    lol = arg1 + arg2;
end

答案 4 :(得分:3)

答案 5 :(得分:3)

我想在Lukas的优秀摘要中添加一个选项:

matlab_wrapper

matlab_wrapper的优点是它是纯Python库,你不需要编译任何东西。适用于GNU / Linux,Windows和OSX。

https://github.com/mrkrd/matlab_wrapper

免责声明:我是matlab_wrapper的作者

答案 6 :(得分:2)

较新版本的matlab似乎提供了一个模块,允许您从python中调用matlab函数。见herehere

答案 7 :(得分:2)

您可以通过安装Matlab使用官方matlab引擎,然后从其外部文件构建python引擎。您可以查看以下指南网站: ---感谢你在这个答案的第一个评论中给出的建议--- 简要介绍的重要步骤是(在Windows平台上,其他可以在下面的URL中查看): 1.下载然后安装matlab,版本必须是R2014或更高版本。 2.在admin下打开PowerShell窗口,然后:

cd "matlabroot\extern\engines\python"

3。使用下面的命令行安装:

python setup.py install

管理员必不可少,否则您将无法构建它。

有关详细信息,请单击下面的官方开始表: http://cn.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html

答案 8 :(得分:2)

您还需要考虑2个选项:

  1. 按照官方MATLAB文档: Create a Python Application with MATLAB Code。这将创建一个包含MATLAB运行时的Python库,您可以在Python代码中调用它。

  2. GNU Octave中运行您的MATLAB代码,然后使用Oct2Py

  3. 从Python调用它

答案 9 :(得分:1)

这是Mathworks的解决方案。

在当前文件夹中,在名为triarea.m的文件中创建MATLAB脚本。

function a = triarea(b,h)
a = 0.5*(b.* h);

同时,您按如下方式运行python代码,

import matlab.engine
eng = matlab.engine.start_matlab()
eng.addpath('your/code/folders/')
ret = eng.triarea(1.0,5.0)
print(ret)
>>> 2.5

Matlab已经提供了引擎的python模块,要进行安装,您可以执行以下操作,

cd matlab_root_folder/extern/engines/python
python setup.py install

大功告成! 提示:您需要注意数据类型,引擎对numpy不友好。您需要先转换数据。

mat_array = matlab.double(list(my_numpy_array))
eng.my_matlabe_function(mat_array )