2016-07-20 10 views
1

Ich versuche, einige Matlab Skripte (keine Funktionsdefinition) von mit oct2py Modul.Daten von Oktav Skript-Ausführung mit Oct2py (Python3)

Diese Skripte (eine große Menge) enthält eine sehr erweiterte Definition zum Lesen einer bestimmten ASCIII-Dateien (im selben Verzeichnis enthalten).

Ich weiß nicht, wie man die von Python gelesenen Daten mit den Matlab (Oktav) -Skripten bekommt.

Hier ist, was ich tue:

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) 

Ausgang:

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

kein Fehler zurückgegeben wird, aber ich weiß nicht, wie die Daten zu erhalten (die in einer Octave Sitzung gelesen wurde) . Die Beispiele, die ich gefunden habe, um .m Dateien mit oct2py auszuführen, wo über Dateien, die Funktionen definieren, aber das ist nicht mein Fall.

+0

Gibt es wirklich einen Raum in 'Oktave auswertet. matlab_file'? – ederag

Antwort

0

Angenommen, Ihr Skript platziert die Ergebnisse im (virtuellen) Oktaven-Arbeitsbereich, können Sie einfach versuchen, auf den Arbeitsbereich zuzugreifen.

Beispiel:

%% In file myscript.m 
a = 1 
b = 2 

Python-Code:

>>> octave.run('myscript.m') 
>>> vars = octave.who(); vars 
[u'A__', u'a', u'b'] 
>>> octave.a() 
1.0 
>>> octave.b() 
2.0 

Einige Hinweise/Einschränkungen:

  • ich in Probleme lief, wenn ich ein Skript versucht, ausgeführt wird, wie es beschwerte ich war versuchen, es als eine Funktion auszuführen; Sie können dies mit dem Befehl run umgehen.
  • Ihr Oktav-Current-Verzeichnis ist möglicherweise nicht mit Ihrem aktuellen Python-Verzeichnis identisch (dies hängt davon ab, wie die Oktav-Engine gestartet wird). Für mich begann Python in meinem Home-Verzeichnis, aber Octave begann in meinem Desktop-Verzeichnis. Ich musste manuell überprüfen und auf das richtige Verzeichnis zu gehen, das heißt:

    octave.pwd() 
    octave.cd('/path/to/my/homedir') 
    
  • Diese seltsam aussehenden Variablen A__ (B__, etc.) in dem Arbeitsbereich spiegelt die jüngsten Argumente, die Sie in Funktionen über das oct2py Engine übergeben (aber Aus irgendeinem Grund können sie nicht wie normale Variablen bezeichnet werden). Z.B.

    >>> 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 
    
  • Wie man es von oben bemerkt hat, ist das übliche ans Variable wird im Arbeitsbereich nicht gehalten. Verlassen Sie sich nicht auf Skriptaktionen, die auf ans verweisen. Im Zusammenhang mit dem oct2py scheint es, dass ans immer None

+1

Vielen Dank für Ihre Antwort. Es löst mein Problem – Josep

+1

Vergnügen; Fühlen Sie sich frei, ein gutes Mojo auf meine Art und Weise zu werfen und es als akzeptiert zu markieren, dann: p –