使用oct2py(python3)从八度脚本执行中获取数据

使用oct2py(python3)从八度脚本执行中获取数据,python,matlab,octave,oct2py,Python,Matlab,Octave,Oct2py,我试图使用oct2py模块从python3执行一些Matlab脚本(不是函数定义) 这些脚本(大量)包含一个非常扩展的定义,用于读取特定的ASCIII文件(包含在同一目录中) 我不知道如何使用Matlab(octave)脚本获取Python读取的数据 我现在做的是: from oct2py import octave import numpy as np import os import pprint hom_dir='/path_to/files&scripts_dir/' os

我试图使用
oct2py
模块从
python3
执行一些
Matlab
脚本(不是函数定义)

这些脚本(大量)包含一个非常扩展的定义,用于读取特定的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>”
Out[237]:
pprint.pprint(out)
”

没有返回错误,但我不知道如何获取数据(在八度会话中读取)。我使用
oct2py
找到了execute.m文件的示例,其中关于定义函数的文件,但这不是我的情况。

假设脚本将结果放在(虚拟)倍频程工作区上,您只需尝试访问该工作区即可

例如:

%% 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_u
    B__
    等)反映了您通过oct2py引擎传递到函数中的最新参数(但由于某些原因,它们不能像普通变量一样被调用)。例如

  • 正如您可能已经从上面注意到的,通常的
    ans
    变量没有保存在工作区中。不要依赖任何引用ans的脚本操作。在
    oct2py
    的上下文中,似乎
    ans
    的计算结果总是
    None


倍频程中真的有空格吗。matlab_文件
?非常感谢您的回复。它解决了我的问题,让我快乐;请随意向我扔一些好的魔咒,然后投票/标记为接受:p
>>> 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