【问题标题】:get data from octave script execution using oct2py (python3)使用 oct2py (python3) 从 octave 脚本执行中获取数据
【发布时间】:2016-07-20 14:30:58
【问题描述】:

我正在尝试使用oct2py 模块从Python 3 执行一些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>”

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

【问题讨论】:

  • octave. matlab_file中真的有空格吗?

标签: python matlab octave oct2py


【解决方案1】:

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

例子:

%% 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

【讨论】:

  • 非常感谢您的回答。它解决了我的问题
  • 高兴;随意以我的方式抛出一些好的魔力,然后投票/将其标记为已接受:p
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2016-03-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多