[英]get data from octave script execution using oct2py (python3)
我正在嘗試使用oct2py
模塊從Python 3
執行一些Matlab
腳本(而不是函數定義)。
這些腳本(大量)包含非常擴展的定義,以讀取特定的ASCIII文件(包含在同一目錄中)。
我不知道如何使用Matlab(八度)腳本獲取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文件,其中有關定義函數的文件,但是我的情況並非如此。
假設您的腳本將結果放置在(虛擬)八度工作空間中,則您可以簡單地嘗試訪問該工作空間。
例:
%% 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引擎傳遞給函數的最新參數(但是由於某些原因,它們不能像普通變量一樣被調用)。 例如
>>> 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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.