在Python脚本中调用MATLAB .m文件和函数

时间:2012-11-19 16:12:45

标签: python matlab interface call mlabwrap

我有一个python脚本的平台,我想在里面调用matlab函数。我找到了几个解决这个问题的线程,其中包括那两个

How do I interact with MATLAB from Python?

Running m-files from Python

但是,线程要么不是最新的,要么不是非常详细。

  1. 是mlabwrap可靠吗?
  2. 你会提倡什么作为在python脚本中调用matlab函数/ .m文件的解决方案?
  3. 使用python的win32com来调用matlab会话 - >这是一个好主意吗 ?你能指出更多关于这个主题的文档或例子吗?
  4. 看起来像sourceForge的链接不是最新的,上次更新2010,

    http://sourceforge.net/projects/mlabwrap/

    1. 你能暗示一些最新版本吗?
    2. 由于

3 个答案:

答案 0 :(得分:3)

mlabwrapper

是python< - >的绝佳解决方案MATLAB桥接。如果某些东西不起作用,只需在SO上报告具体问题:)

你必须注意mlabwrapper作为项目已经存在了很长一段时间。 http://mlabwrap.sourceforge.net/

我最近遇到了mlabwrap.cpp的问题,为此我发现了以下github fork

  

相关的是有一个mlabwrap v1.1-pre的副本   (http://mlabwrap.sourceforge.net/)补丁如下所述:   http://sourceforge.net/mailarchive/message.php?msg_id=27312822

     

修补错误的补丁:

     

mlabraw.cpp:225:错误:从'const mwSize *'无效转换为   'const int *'另请注意,在Ubuntu中你需要sudo apt-get install   CSH

     

有关详细信息,请参阅http://github.com/aweinstein/mlabwrap

MLAB

花了更多时间之后,我制作了一个github镜像来更新,修复错误并维护包装器https://github.com/ewiger/mlab(欢迎使用补丁和拉取请求!)

可以安装pip,即

pip install mlab

我现在已经排除了cpp实现。目前的方式如下:

对于Linux / Mac库,使用MATLAB实例创建管道连接。其余的是序列化(部分由@brentlance指出),这是使用numpy完成的。

对于Windows库,使用DCOM进行通信。 (但我仍然要使用注册表修复版本查找。)

何时使用mlab?

我建议在MATLAB中调用非常高级的用户函数(主要是返回逻辑结果或非常标准的内置类型作为矩阵),以尽量减少与MATLAB的任何通信。这种方法非常适合遗留代码,但可能需要编写一些包装接口来简化函数声明。

总的来说,代码有点麻烦,而且很多都是拼凑而成的。核心部分(现在这是 matlabpipe matlabcom )似乎做得很好。最终,除非您愿意花时间测试,错误报告,错误修复和功能请求所有用例,否则我不建议 mlab 用于全面生产应用程序。

答案 1 :(得分:1)

回答你的问题:

  1. 我们使用了mlabwrap,它很可靠。唯一的困难是编译它。我们遇到了一些问题。但是,一旦你编译它,它运行良好。
  2. 我建议matlab_wrapper,因为它更容易安装(纯Python,无编译),支持各种数据结构(数字,逻辑,结构,单元数组)并在GNU / Linux上运行,Windows,OSX。
  3. 使用win32com与MATLAB进行通信应该可行,但它的级别相当低且不便携。
  4. 免责声明:我是matlab_wrapper的作者。

答案 2 :(得分:0)

自从MATLAB R2014b起,现在有了适用于Python的MATLAB API。有关更多信息,请参见MATLAB the following instances will not mount since the element is already “blocked” by first instance。但是,它需要启动MATLAB引擎,这可能需要一些时间。