从Python调用MATLAB函数

57 投票
10 回答
44662 浏览
提问于 2025-04-15 22:59

有没有办法在Python里面运行MATLAB的函数呢?我在网上查了一下,只找到一个叫PyMat的东西。可惜的是,它的编译版本只支持Python 2.2,而我用的是2.6。所以我试着下载源代码,想自己编译一下。但是我编译不成功,VC++ express好像没有必要的功能来编译它。有没有人有适合PC的编译版本?或者有什么替代PyMat的工具吗?谢谢!

10 个回答

29

另一个选择是 Mlabwrap

Mlabwrap 是一个高级的桥接工具,可以让 Python 和 Matlab® 之间进行互动,让 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)))
33

我知道这个问题已经很老了,也有人回答过。但我在找同样的东西(针对Mac),发现有很多不同的方法可以和Matlab互动,成熟度也各不相同。以下是我找到的一些选项:

pymat

这是一个低级接口,用于通过Matlab引擎(libeng)进行通信(基本上是一个随Matlab一起提供的库)。这个模块需要编译并与libeng链接。

http://pymat.sourceforge.net
最后更新:2003年

pymat2

这是pymat开发的一个短暂延续。似乎可以在Windows(包括64位)、Linux和Mac上运行(需要一些修改)。

https://code.google.com/p/pymat2/
最后更新:2012年

mlabwrap

这是一个高级接口,也作为一个模块提供,需要编译并与libeng链接。它可以让你在Python中使用Matlab的函数,比如你可以这样做:

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

http://mlabwrap.sourceforge.net
最后更新:2009年

mlab

这是对mlabwrap的重新包装。基本上,它用一个Python模块(matlabpipe)替代了mlabwrap中与'libeng'链接的C++代码,通过管道与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年

python-matlab-bridge

这也是一个较新的包,仍在积极维护中。通过某种套接字与Matlab通信。不幸的是,暴露的函数有点有限。我没能弄明白如何调用一个接受结构体作为参数的函数。需要安装zmq、pyzmq和IPython,这些安装起来都比较简单。

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

26

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'

更多信息可以在这里找到。

撰写回答