2016-07-20 90 views
1

我試圖使用oct2py模塊從Python 3模塊執行一些Matlab腳本(不是函數定義)。使用oct2py從octave腳本執行中獲取數據(python3)

這些腳本(大量)包含一個非常擴展的定義來讀取特定的ASCIII文件(包含在同一目錄中)。

我不知道如何獲得由Python(八度)腳本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>」 

返回沒有錯誤,但我不知道如何獲得的數據(即是在一個八度會讀) 。我使用oct2py找到執行.m文件的例子,其中涉及定義函數的文件,但這不是我的例子。

+0

是否真的在'八度的空間。 matlab_file'? – ederag

回答

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

+1

非常感謝您的支持者。它解決了我的問題 – Josep

+1

快樂;隨意按我的方式拋出一些好的魔咒,並且將它記爲/接受:p –

相關問題