我有一个python脚本的平台,我想在里面调用matlab函数。我找到了几个解决这个问题的线程,其中包括那两个
How do I interact with MATLAB from Python?
但是,线程要么不是最新的,要么不是非常详细。
看起来像sourceForge的链接不是最新的,上次更新2010,
http://sourceforge.net/projects/mlabwrap/
由于
答案 0 :(得分:3)
是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
花了更多时间之后,我制作了一个github镜像来更新,修复错误并维护包装器https://github.com/ewiger/mlab(欢迎使用补丁和拉取请求!)
可以安装pip,即
pip install mlab
我现在已经排除了cpp实现。目前的方式如下:
对于Linux / Mac库,使用MATLAB实例创建管道连接。其余的是序列化(部分由@brentlance指出),这是使用numpy完成的。
对于Windows库,使用DCOM进行通信。 (但我仍然要使用注册表修复版本查找。)
我建议在MATLAB中调用非常高级的用户函数(主要是返回逻辑结果或非常标准的内置类型作为矩阵),以尽量减少与MATLAB的任何通信。这种方法非常适合遗留代码,但可能需要编写一些包装接口来简化函数声明。
总的来说,代码有点麻烦,而且很多都是拼凑而成的。核心部分(现在这是 matlabpipe 和 matlabcom )似乎做得很好。最终,除非您愿意花时间测试,错误报告,错误修复和功能请求所有用例,否则我不建议 mlab 用于全面生产应用程序。
答案 1 :(得分:1)
回答你的问题:
免责声明:我是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引擎,这可能需要一些时间。