我尝试使用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文件的示例,其中有关于定义函数的文件,但这不是我的情况。
答案 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