2017-07-27 2 views
1

Je calculais les descripteurs de fonction dans HoG Octave puis je suis en train de regrouper ces données dans Python à l'aidescikit-learn. Pour tester mon code dans Python J'essaie de transmettre une donnée 4000x2 à Python. J'appelle le script Python de Octave en utilisantNe peut pas transmettre des données d'octave en python par des arguments de ligne de commande

system('python filename.py data')

puis essayer d'obtenir les données à l'aide

sys.argv

mais je reçois le second argument comme une chaîne 'données' et pas les données 4000x2 que je passe de Octave

Que dois-je faire pour que je puisse obtenir les données originales dans Python et non seulement la chaîne « données »

+1

Je ne connais pas Octave mais probablement parce que vous utilisez des guillemets simples ''python filename.py data'' la fonction système le prend comme une chaîne. Je ne sais pas si vous pouvez passer au système quelque chose comme 'system ('python filename.py' + data)' Vous devez dire 'system' que' data' est une variable, pas une chaîne. – fvidalmolina

+2

Vous pouvez également envisager d'écrire vos données dans un fichier dans un format commun comme csv à partir de votre script octave (https://octave.sourceforge.io/octave/function/csvwrite.html), puis y accéder à partir de votre script python. – voidpointercast

+0

@fvidalmolina La méthode que vous avez décrite ne fonctionne pas car python tente de concaténer les données sous la forme d'une chaîne à la chaîne 'python filename.py' – Siladittya

Répondre

1

Une commande python est intégrée dans l'octave. Sinon, je voudrais enregistrer en tant que fichier .mat, et l'ouvrir dans votre script python en utilisant scipy.io.loadmat.

Il ya aussi eval_py et python_cmd du symbolic package, mais je ne sais pas si cela est approprié pour votre cas d'utilisation particulier. La manière la plus générale, compatible avec Matlab, et recommandée pour ce faire est la suivante: .mat.

+0

Écrire dans un fichier '.mat' et lire' scipy.io.loadmat' a fonctionné – Siladittya

+0

Mais je ne comprends pas comment fonctionne la commande 'python'. J'utilise ce code 'python ('filename.py', données)' mais je reçois l'erreur 'erreur: python: des arguments non valides erreur: appelé de python à la ligne 48 colonne 5' – Siladittya

+1

Si je comprends bien, la commande 'python' fonctionne comme si vous aviez appelé' python arg1 arg2 arg4 etc' du terminal. Par conséquent, vos arguments doivent être des chaînes, et vous les traiterez de manière appropriée depuis le script python, comme si vous aviez appelé le script python depuis le terminal. Il vaut mieux s'en tenir aux fichiers '.mat'. Les interfaces fantaisistes communiquant entre python et octave (par exemple oct2py) utilisent des sockets sous le capot pour réaliser un transfert de données par octet. –

1

Je ne suis pas un expert en ce qui concerne Octave, mais la réponse est probablement quelque chose comme que:

command=sprintf("python filename.py %s",data) 
system(command) 

Veillez à ce que la quantité d'arguments de ligne de commande soit limitée dans la plupart des systèmes d'exploitation.

+0

J'ai essayé d'obtenir les arguments en utilisant 'sys.argv' et j'ai essayé d'imprimer les données en python en utilisant la méthode que vous avez conseillée. Mais ce n'est que l'impression de chaînes 'python filename.py' plusieurs fois sous forme de liste comme '['filename.py', 'python', 'filename.py', 'python', 'nomdefichier.py', 'python ',' filename.py '] ' – Siladittya

+0

Que montre octave lorsque vous imprimez la commande à la console? Pourriez-vous fournir la section principale de votre script python? – voidpointercast