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

时间:2016-07-20 14:30:58

标签: python matlab octave oct2py

我尝试使用Python 3模块从oct2py执行一些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) 脚本(不是函数定义)。

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

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

我在做什么:

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

输出:

oct2py

没有返回错误,但我不知道如何获取数据(在Octave会话中读取)。我找到的使用Doc2Vec.load('my_doc2vec.pkl') UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 0: ordinal not in range(128) 执行.m文件的示例,其中有关于定义函数的文件,但这不是我的情况。

1 个答案:

答案 0 :(得分: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命令绕过它。
  • 您的八度当前目录可能与您的python当前目录不同(这取决于八度引擎的启动方式)。对我来说,python在我的主目录中启动,但是octave在我的桌面目录中启动。我必须手动检查并转到正确的目录,即:

    octave.pwd()
    octave.cd('/path/to/my/homedir')
    
  • 工作区中那些奇怪的变量A__B__等)反映了您通过oct2py引擎传递给函数的最新参数(但出于某种原因,它们可以&#39;被称为正常变量)。 E.g。

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