2

我正在尝试使用模块执行一些Matlab脚本(不是函数定义) 。Python 3oct2py

这些脚本(大量)包含一个非常扩展的定义,用于读取特定的 ASCIII 文件(包含在同一目录中)。

我不知道如何使用 Matlab (octave) 脚本获取 Python 读取的数据。

这是我在做什么:

from oct2py import octave

import numpy as np
import os

import pprint

hom_dir='/path_to/files&scripts_dir/'
os.chdir(hom_dir)

octave.addpath(/path_to/files&scripts_dir/')

out=octave. matlab_file # (matlab_file.m)

输出:

Out[237]: <function oct2py.core.Oct2Py._make_octave_command.<locals>.octave_command>”

pprint.pprint(out)

<function Oct2Py._make_octave_command.<locals>.octave_command at 0x7f2069d669d8>”

没有返回错误,但我不知道如何获取数据(在 Octave 会话中读取)。我找到的执行 .m 文件的示例使用oct2pywhere about 定义函数的文件,但这不是我的情况。

4

1 回答 1

0

假设您的脚本将结果放在(虚拟)八度工作区,您可以简单地尝试访问工作区。

例子:

%% In file myscript.m
a = 1
b = 2

Python代码:

>>> octave.run('myscript.m')
>>> vars = octave.who(); vars
[u'A__', u'a', u'b']
>>> octave.a()
1.0
>>> octave.b()
2.0

一些注意事项/注意事项:

  • 当我尝试运行脚本时遇到了问题,因为它抱怨我试图将它作为函数运行;您可以使用run命令绕过它。
  • 您的 octave 当前目录可能与您的 python 当前目录不同(这取决于 octave 引擎的启动方式)。对我来说,python 在我的主目录中启动,但 octave 在我的桌面目录中启动。我不得不手动检查并转到正确的目录,即:

    octave.pwd()
    octave.cd('/path/to/my/homedir')
    
  • 工作区中那些看起来很奇怪的变量A__B__等)反映了您通过 oct2py 引擎传递给函数的最新参数(但由于某种原因,它们不能像普通变量一样被调用)。例如

    >>> octave.plus(1,2)
    3.0
    >>> print octave.who()
    [u'A__', u'B__', u'a', u'b']
    >>> octave.eval('A__')
    A__ =  1
    >>> octave.eval('B__')
    B__ =  2
    
  • 正如您可能已经从上面注意到的那样,通常的ans变量没有保存在工作区中。不要依赖任何引用ans. 在它的上下文中,oct2py它似乎ans总是会评估为None

于 2016-07-23T15:48:23.933 回答