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

如何从python访问matlab/octave模块?,python,matlab,octave,lapack,Python,Matlab,Octave,Lapack,我正在寻找一种从python访问matlab模块的方法。我目前的情况是: 我有一个python代码,它通过调用Lapack例程进行数值计算,而内存被分配为ctypes,并作为指向Lapack例程的指针传递 我还有一个与倍频程兼容的matlab模块,它实现了一些我想使用的数学技巧 我现在的问题是: 保持python中所有主要工作的同时利用matlab/octave模块提供的可能性的有效方法是什么。如果我的ctype数组不需要转换成其他对象来运行倍频程,这也会很好。然而,我可以看到最后一点很难做

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

  • 我有一个python代码,它通过调用Lapack例程进行数值计算,而内存被分配为
    ctypes
    ,并作为指向Lapack例程的指针传递
  • 我还有一个与倍频程兼容的matlab模块,它实现了一些我想使用的数学技巧
我现在的问题是:
保持python中所有主要工作的同时利用matlab/octave模块提供的可能性的有效方法是什么。如果我的ctype数组不需要转换成其他对象来运行倍频程,这也会很好。然而,我可以看到最后一点很难做到

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

  • :然而,这个软件包似乎是阿尔法之前的软件包
  • 沿着这条驼峰之路走:ctypes->*.mat文件(通过numpy)->倍频程->*.mat文件->ctypes(通过numpy)

  • 你考虑过使用OMPC吗?当我不想重新编写一些数值线性代数例程时,我已经非常成功地使用了它。我可以想象,Matlab命令越深奥,翻译起来就越困难。。。但也许值得一试。最后,您需要将Matlab代码转换为Python,因为这将成为速度和性能的瓶颈。将Matlab代码保留为Matlab格式的唯一原因是,如果将其全部翻译会产生巨大的前期成本,OMPC应该在一定程度上减轻这一成本。否则,完全摆脱对Matlab/倍频程的依赖几乎总是值得的。

    我在让OMPC工作时遇到了一些麻烦,因为(I)md5模块已被弃用,(II)Python 2.6和以后不再接受对象的参数。u new_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu需要更新byteplay.py脚本

    为了解决问题(I),我更改了ompc/目录中找到的yacc.py的第74行。该行导入md5和其他内容。我删除了md5模块并添加了以下行:

    from hashlib import md5
    
    稍后在yacc.py脚本的第1160行,我更改了

    Signature = md5.new()
    
    对以下内容:

    Signature = md5()
    
    要运行ompcly.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),我用谷歌搜索了byteplay,并用新版本替换了现有的脚本。

    您可以使用,IIUC是由其作者启动的,因为pytave在win32上不工作。它通过its成功地在IPython中使用,我可以看出它本身很容易使用,代码得到维护(我报告了一个小Unicode错误,作者在一天内修复了它),并且运行良好。大多数情况下都很简单:

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

    有关更多示例,您可以查看。

    可能重复@gnovice部分我同意,但是这个问题不是关于访问matlab(因为它不适用于我),而是一个使用倍频程运行的matlab模块!它还涉及python中的Lapack和ctypes。Thx的链接虽然^^。我提出了一个悬赏,因为我很想知道这一点自己,但没有时间做研究。看到我的答案为另一个选择。我在这里添加了它,而不是在重复的问题中@gnovice指出,因为它是基于八度音阶的,这里没有提到。@Juanlu001如果我的一个问题的新答案被发布^^,我会收到一个通知。谢谢你这个迟来的回答!它似乎是Pytave的一个非常好的替代品!幸运的是,我不再那么依赖八度音阶了,因为我把大部分东西都移植到了numpy。我将尝试一下……这在python>=2.6(2010年已确认)下不起作用