能否从Python中运行MATLAB函数? 我在网上搜索,只找到了PyMat。糟糕的是编译版本只支持Python2.2,而我使用的是2.6。因此我尝试下载源代码,以便自己编译。但我无法编译它,VC++ express似乎没有必要的功能来编译它。有人有计算机的编译版本吗? 或者有任何PyMat的替代品吗? 谢谢
能否从Python中运行MATLAB函数? 我在网上搜索,只找到了PyMat。糟糕的是编译版本只支持Python2.2,而我使用的是2.6。因此我尝试下载源代码,以便自己编译。但我无法编译它,VC++ express似乎没有必要的功能来编译它。有人有计算机的编译版本吗? 或者有任何PyMat的替代品吗? 谢谢
我知道这是一个旧问题并且已经有答案了。但是我正在寻找同样的东西(用于Mac),发现有一些选项,具有不同的与matlab交互方法和不同的成熟度水平。以下是我发现的:
使用matlab引擎(libeng
)进行通信的Matlab低级接口(基本上是一个随matlab一起提供的库)。该模块必须编译并链接到libeng。
http://pymat.sourceforge.net
最近更新:2003年
pymat开发的某种短暂延续。似乎在Windows(包括64位)、Linux和Mac上都可以使用(需要一些更改)。
https://code.google.com/p/pymat2/
最近更新:2012年
高级接口,也作为模块提供,需要编译并链接到libeng
。它将Matlab函数公开给Python,以便您可以执行有趣的操作,例如
mlab.plot(x, y, 'o')
http://mlabwrap.sourceforge.net
最近更新:2009年
mlabwrap的重新打包努力。基本上,它使用Python模块(matlabpipe)替换了在mlabwrap中与libeng链接的C++代码,通过管道与Matlab通信。这样做的主要优点是不需要任何编译。
不幸的是,该软件包目前存在一些错误,在 Mac 上似乎根本无法正常工作。我报告了其中一些问题,但最终放弃了。此外,如果您必须进入源代码,请准备好进行许多欺骗和一堆相当丑陋的黑客攻击。如果这变得更加成熟,它可能是最好的选择之一。
https://github.com/ewiger/mlab
最近更新:2013年
一个较新的软件包(2010年),也通过libeng
与Matlab交互。与其他软件包不同,该软件包通过ctypes加载引擎库,因此不需要编译。虽然它并不完美,但仍在维护中,并且我发现的(64位Mac特定的)问题应该很容易解决。
(编辑于2014-05-20:看起来这些问题已经在源码中得到了解决,因此使用0.2.4应该没问题)
http://pymatlab.sourceforge.net
最近更新:2014年
也是一个较新的软件包,仍在积极维护。通过某种套接字与Matlab通信。不幸的是,公开的函数有些受限。我无法弄清楚如何调用带有结构参数的函数。需要zmq、pyzmq和IPython,这些都很容易安装。
http://arokem.github.io/python-matlab-bridge
最近更新:2014年
另一个选择是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)))
看起来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'
更多信息请点击这里
有一个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
我想在Lukas的精彩总结中再添加一种选择:
matlab_wrapper的优点是它是纯Python库,您不需要编译任何东西。适用于GNU / Linux,Windows和OSX。
https://github.com/mrkrd/matlab_wrapper
免责声明:我是matlab_wrapper的作者。
cd "matlabroot\extern\engines\python"
3. 使用以下命令行安装:
python setup.py install
还有两个选项供您考虑:
遵循官方的MATLAB文档:使用MATLAB代码创建Python应用程序。这将创建一个包含MATLAB运行时的Python库,您可以从Python代码中调用它。
在GNU Octave中运行您的MATLAB代码,然后使用Oct2Py从Python中调用它。
function a = triarea(b,h)
a = 0.5*(b.* h);
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 )