是否可以在Python中运行MATLAB函数? 我搜索互联网,我只能找到PyMat。坏的是编译版本只支持Python2.2,我使用的是2.6。所以我尝试下载源代码,所以我可以自己编译。但我无法编译它,VC ++ express似乎没有必要的功能来编译它。有没有人有PC的编译版本? 或任何替代PyMat? 感谢
答案 0 :(得分:33)
我知道这是一个老问题,已经得到了解答。但我正在寻找相同的东西(对于Mac),并发现有很多选项可以使用不同的方法与matlab进行交互,并且有不同的成熟度。这是我发现的:
Matlab的低级接口,使用matlab引擎(libeng
)进行通信(基本上是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的重新包装工作。基本上它取代了链接&#lib; libeng'的c ++代码。在 mlabwrap 中使用python模块(matlabpipe)通过管道与matlab通信。这样做的主要优点是它不需要任何类型的编译。
不幸的是,这个软件包目前有一些bug,而且似乎根本无法在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,这些都很容易安装。
答案 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的优点是它是纯Python库,你不需要编译任何东西。适用于GNU / Linux,Windows和OSX。
https://github.com/mrkrd/matlab_wrapper
免责声明:我是matlab_wrapper的作者
答案 6 :(得分:2)
答案 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个选项:
按照官方MATLAB文档: Create a Python Application with MATLAB Code。这将创建一个包含MATLAB运行时的Python库,您可以在Python代码中调用它。
在GNU Octave中运行您的MATLAB代码,然后使用Oct2Py
答案 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 )