2016-07-20 2 views
1

J'essaye d'exécuter certains scripts Matlab (pas une définition de fonction) de Python 3 en utilisant le module oct2py.obtenir des données à partir de l'exécution du script octave en utilisant oct2py (python3)

Ces scripts (une grande quantité) contiennent une définition très étendue pour lire un fichier ASCIII spécifique (contenu dans le même répertoire).

Je ne sais pas comment obtenir les données lues par Python avec les scripts Matlab (octave).

Voici ce que je fais:

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) 

sortie:

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

Aucune erreur est retourné, mais je ne sais pas comment obtenir les données (qui ont été lus dans une session d'octave) . Les exemples que j'ai trouvés pour exécuter des fichiers .m en utilisant oct2py où sur les fichiers qui définissent des fonctions, mais ce n'est pas mon cas.

+0

Est-il vraiment un espace 'octave. matlab_file'? – ederag

Répondre

0

En supposant que votre script place les résultats dans l'espace de travail (virtuel) d'octave, vous pouvez simplement tenter d'accéder à l'espace de travail.

Exemple:

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

code Python:

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

Quelques notes/mises en garde:

  • je suis tombé sur des problèmes quand j'ai essayé d'exécuter un script, car il se plaignait que j'étais essayer de l'exécuter en tant que fonction; vous pouvez ignorer cela en utilisant la commande run.
  • Votre répertoire actuel d'octave peut ne pas être le même que votre répertoire courant python (cela dépend de la façon dont le moteur d'octave est démarré). Pour moi, python a démarré dans mon répertoire personnel mais Octave a démarré dans mon répertoire de bureau. Je devais vérifier manuellement et allez dans le répertoire, à savoir:

    octave.pwd() 
    octave.cd('/path/to/my/homedir') 
    
  • Ces étranges des variables à la recherche A__ (B__, etc.) dans l'espace de travail reflètent les arguments les plus récents que vous avez passées en fonctions via le moteur de oct2py (mais pour une raison quelconque, ils ne peuvent pas être appelés comme des variables normales). Par exemple.

    >>> 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 
    
  • Comme vous avez pu le constater d'en haut, la variable ans habituelle ne sont pas conservés dans l'espace de travail. Ne comptez pas sur les actions de script qui référencent ans. Dans le contexte de oct2py il semble que ans sera toujours le résultat None

+1

Merci beaucoup pour votre réponse. Il résout mon problème – Josep

+1

Plaisir; n'hésitez pas à jeter un peu de bon mojo ma façon et upvote/marquer comme accepté alors: p –