从python调用MATLAB函数

从python调用MATLAB函数,python,matlab,visual-c++,Python,Matlab,Visual C++,可以在Python中运行MATLAB函数吗? 我在网上搜索,只能找到PyMat。糟糕的是编译后的版本只支持Python2.2,而我使用的是2.6。所以我试着下载源代码,这样我就可以自己编译了。但是我不能编译它,VC++express似乎没有必要的功能来编译它。有人有PC的编译版本吗? 或者PyMat的替代品? 谢谢PyMat看起来像是被遗弃了 我假设您在windows上,因此您可以始终使用最简单的方法并使用Matlab的COM接口: >>> import win32com.cl

可以在Python中运行MATLAB函数吗? 我在网上搜索,只能找到PyMat。糟糕的是编译后的版本只支持Python2.2,而我使用的是2.6。所以我试着下载源代码,这样我就可以自己编译了。但是我不能编译它,VC++express似乎没有必要的功能来编译它。有人有PC的编译版本吗? 或者PyMat的替代品?
谢谢

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'
更多信息参见本页:

另一个选项是:

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)))

有一个python-matlab桥接器,它是独一无二的,因为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

我知道这是一个老问题,已经得到了回答。但我也在寻找同样的东西(Mac),发现有很多选择,它们与matlab交互的方法不同,成熟度也不同。以下是我的发现:

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


最后更新:2003年

pymat2 pymat开发的一个有点短暂的延续。似乎可以在windows(包括64位)、linux和mac(有一些改动)上运行


最后更新:2012年

mlabwrap 一个高级接口,也是一个模块,需要编译和链接
libeng
。它向python公开了Matlab函数,这样你就可以做一些有趣的事情,比如

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


最后更新:2009

mlab mlabwrap的重新包装工作。基本上,它取代C++代码,它与MyLable中的“LIBEN”链接,其中Python模块()通过管道与MATLAB通信。它的主要优点是不需要任何编译

不幸的是,这个软件包目前有几个bug,在mac上似乎根本不起作用。我报了一些,但最终还是放弃了。另外,如果你必须进入源代码,要准备好大量的欺骗和一堆相当丑陋的黑客;-)如果这变得更成熟,它可能是最好的选择之一


最后更新:2013年

pymatlab 一个更新的软件包(2010),它还通过
libeng
与Matlab交互。与其他包不同,此包通过加载引擎库,因此不需要编译。它并非没有缺陷,但仍在维护中,我发现的(64位Mac专用)问题应该很容易解决。
编辑2014-05-20:这些问题似乎已经在源代码中得到了解决,因此使用0.2.4应该没问题)


最后更新:2014年

python matlab桥 还有一个仍在积极维护的更新包。通过某种套接字与Matlab通信。不幸的是,公开的函数有点有限。我不知道如何调用以结构为参数的函数。需要zmq、pyzmq和IPython,这些都很容易安装



最后更新:2014年

我想在卢卡斯的精彩总结中再添加一个选项:

matlab_包装器 matlab_包装器的优点是它是纯Python库,您不需要编译任何东西。在GNU/Linux、Windows和OSX中工作


免责声明:我是matlab_wrapper的作者,matlab的新版本似乎提供了一个模块,允许您从python中调用matlab函数。见和

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

cd "matlabroot\extern\engines\python"
三,。使用下面的命令行安装:

python setup.py install
管理员是必不可少的,否则您将无法构建它

有关详细信息,您可以单击下面的正式起始页:

2更多选项供您考虑:

  • 遵循MATLAB官方文档: . 这将创建一个包含MATLAB运行时的Python库,您可以从Python代码中调用它

  • 在中运行MATLAB代码,然后使用


  • 这是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 )
    

    嘿,如果MATLAB命令产生错误,甚至打印出错误,有没有办法让Python脚本停止?我注意到Python默认情况下会忽略错误,并继续执行脚本-感谢matlab的run语句使用此命令运行脚本可执行文件?当matlab让您失望时,numpy是您的朋友这包含了开始使用
    mlabwrap
    的步骤请注意,还有一个“重新打包的努力[mlabwrap],以使事情保持最新”。@FlorianBrucker:mlab不知何故被破坏了,至少它对我不起作用…是吗