如何从python访问matlab/octave模块?

Wol*_*tan 25 python matlab octave lapack

我正在寻找一种从python访问matlab模块的方法.我目前的情况是这样的:

  • 我有一个python代码,通过调用Lapack例程进行数值计算,同时将内存分配为ctypes并作为指向Lapack例程的指针传递.
  • 我还有一个matlab模块,它与八度音程兼容,可以做一些我想要使用的数学技巧.

我现在的问题是:
什么是保持python中所有主要工作的有效方法,同时利用matlab/octave模块提供的可能性.如果我的ctype数组不必转换为其他对象以便运行八度音程,那么它也会很好.但是,我可以看到最后一点很难实现.

我目前的研究向我展示了两种可能的选择

  1. Pytave:不过看起来这个包装有点预备吗?!
  2. 走这条笨拙的道路:ctypes - >*.mat文件(通过numpy) - > octave - >*.mat文件 - > ctypes(通过numpy)

ast*_*nlu 20

您可以使用oct2py,其中IIUC由其作者启动,因为pytave在win32上不起作用.它通过它的octavemagic扩展成功地在IPython中使用,我可以说它很容易单独使用,代码得到维护(我报告了一点点的Unicode错误并且作者在一天内修复了它)并且效果很好.大多数时候都很简单:

>>> from oct2py import octave
>>> octave.run("cos(pi / 3)")
'ans =  0.50000'
>>> octave.call("foo", a, b)  # Function in foo.m
Run Code Online (Sandbox Code Playgroud)

有关更多示例,您可以查看此博客文章.


ely*_*ely 8

您是否考虑过使用OMPC,http: //ompc.juricap.com/ ?当我不想重写一些数值线性代数例程时,我已经非常成功地使用了它.我可以想象,Matlab命令越是深奥,翻译起来就越难......但是值得一试.最后,您将要将Matlab代码转换为Python,因为它将成为速度和性能的瓶颈.将Matlab代码保留为Matlab格式的唯一原因是,如果将所有内容翻译成一个巨大的前期成本,那么OMPC应该会有所缓解.否则,完全摆脱Matlab/Octave依赖性的前期成本几乎总是值得的.