簡體   English   中英

使用oct2py(python3)從八度腳本執行獲取數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM