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

| 我正在寻找一种从python访问matlab模块的方法。我目前的情况是这样的: 我有一个python代码,它通过调用Lapack例程进行数值计算,而内存分配为“ 0”并作为指向Lapack例程的指针传递。 我也有一个与八度兼容的matlab模块,它做了一些我想使用的数学技巧。 我的问题是这样的: 一种有效的方式将所有主要工作保留在python中,同时利用matlab / octave模块提供的可能性。如果我的ctype数组不必为了运行八度而必须转换为其他对象,那也很好。但是,我可以看到最后一点很难实现。 我目前的研究向我展示了两种可能的选择: Pytave:但是,看来这个软件包有点像pre alpha ?! 走这条坎ump的路:ctypes-> * .mat文件(通过numpy)->八度-> * .mat文件-> ctypes(通过numpy)     
已邀请:
您是否考虑过使用OMPC,http://ompc.juricap.com/?当不希望重新编写一些数字线性代数例程时,我已经使用了非常成功的方法。我可以想象,Matlab命令越深奥,翻译起来就越难...但是值得一试。最后,您将需要将Matlab代码转换为Python,因为这将成为速度和性能的瓶颈。将Matlab代码保留为Matlab格式的唯一原因是,如果将其全部翻译会付出巨大的前期成本,那么OMPC应该有所减轻。否则,完全摆脱对Matlab / Octave的依赖几乎总是值得的前期成本。     
您可以使用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
有关更多示例,请查看此博客文章。     
我在使OMPC正常工作时遇到了一些麻烦,因为(I)不推荐使用md5模块,(II)Python 2.6和更高版本不再接受Object .__ new __()或Object .__ init __()的参数,以及(III)byteplay.py脚本需要更新。 为了解决问题(I),我更改了ompc /目录中的yacc.py的第74行。这行导入md5等。我删除了md5模块,并添加了以下行:
from hashlib import md5
稍后,在yacc.py脚本的第1160行中,我进行了更改,
Signature = md5.new()
到以下
Signature = md5()
要运行由ompcply.py生成的代码,请将\'from ompc import * \'添加到文件的开头,然后使用Python的早期版本运行它,如下所示:
$ python2.5 ompcply.py script.m > newscript.pym
$ python2.5 newscript.pym
使用高于2.5的Python版本会出现以下错误:
/home/connor/downloads/OMPC/ompclib/ompclib_numpy.py:66: DeprecationWarning: object.__new__() takes no parameters
  a = super(mvar, cls).__new__(cls, *args, **kwargs)
为了解决问题(III),我搜索了字节播放,并用较新的版本替换了现有脚本。     

要回复问题请先登录注册