Comment puis-je accéder à un matlab/octave module de python?
Je suis à la recherche d'un moyen d'accéder à un matlab module de python. Ma situation actuelle est: est-ce
- J'ai un code python qui n'calculs numériques par l'appel de routines Lapack alors que la mémoire est allouée comme
ctypes
et transmis comme des pointeurs vers les routines Lapack. - J'ai aussi un matlab module, qui est compatible avec octave, qui fait un peu de mathématiques trucs que je veux utiliser.
Ma question maintenant est: est-ce
Ce qui est un moyen efficace de garder tous les principaux travaux en python alors que dans le même temps, d'exploiter les possibilités que matlab/octave modules offrent. Aussi, il serait une sorte de gentil, si mon ctype tableaux n'ont pas à être converti en un autre objet pour exécuter la commande octave. Cependant, je peux voir que ce dernier point est difficile à réaliser.
Ma recherche actuelle montre-moi deux options possibles:
- Pytave: Cependant, il semble que cette packages est une sorte de pré alpha?!
- Aller de bosses de la route: ctypes -> *.tapis de fichier (via numpy) -> octave -> *.tapis de fichier -> ctypes (via numpy)
- double possible de l'Appel de fonctions MATLAB à partir de python
- En partie je suis d'accord, cependant, cette question n'est pas sur l'accès à matlab (puisqu'il n'est pas disponible pour moi) mais un matlab module en cours d'exécution avec octave! Aussi, il est à propos de Lapack et ctypes en python. Thx pour le lien bien^^.
- J'ai mis une prime sur ce parce que j'aimerais savoir moi-même, mais n'ont pas le temps de faire de la recherche.
- Voir ma réponse pour une autre option. Je l'ai ajouté ici plutôt que dans le double question @gnovice souligné, car il est basé sur l'Octave, ce qui n'est pas mentionné.
- Je reçois une notification de toute façon si une nouvelle réponse à une question de la mienne est posté^^.
Vous devez vous connecter pour publier un commentaire.
Avez-vous envisagé d'utiliser OMPC, http://ompc.juricap.com/ ? Je l'ai utilisé avec grand succès lorsqu'il n'est pas désireux de le ré-écrire certaines routines d'algèbre linéaire numérique. Je peux imaginer que les plus ésotériques les commandes Matlab, le plus dur c'est de traduire... mais il pourrait être la peine d'essayer. En fin de compte, vous allez vouloir convertir votre code Matlab pour Python, car il va être un goulot d'étranglement sur la vitesse et la performance. La seule raison pour laisser le code Matlab Matlab format est de savoir si il serait un énorme coût pour traduire tout cela, qui OMPC devrait atténuer quelque peu. Sinon, c'est presque toujours la peine que le coût initial de complètement se débarrasser de Matlab/Octave dépendance.
Vous pouvez utiliser oct2py, qui IIUC a été lancé par son auteur, car pytave ne fonctionne pas sur win32. Il est utilisé avec succès dans IPython par le biais de son octavemagic extension et je peux dire qu'il est facile à utiliser sur son propre, le code est maintenu (je l'ai signalé un peu Unicode bug et l'auteur, il fixe en un jour) et fonctionne bien. La plupart du temps est aussi simple que:
Pour d'autres exemples, vous pouvez vérifier cet article de blog.
J'ai eu quelques difficultés à obtenir OMPC de travailler en raison (I) le md5 module est obsolète, (II) de la version 2.6 de Python et, plus tard, de ne plus accepter les arguments pour l'Objet.__new__() ou d'un Objet.__init__(), et (III) la byteplay.py script nécessaire pour être mis à jour.
Pour résoudre la question (I), j'ai changé de ligne de 74 yacc.py trouvé dans l'ompc/répertoire. Cette ligne importations md5 entre autres choses. J'ai supprimé le md5 du module et de l'ajout de la ligne ci-dessous:
Plus tard dans la yacc.py script, en ligne 1160, j'ai changé,
à la suivante,
Pour exécuter le code généré par ompcply.py, ajouter "de ompc import *" au début du fichier et exécutez-le ensuite avec une version antérieure de Python, comme:
À l'aide d'une version de Python plus tard 2.5 vous donnera l'erreur suivante:
Pour résoudre la question (III) j'ai googlé byteplay, et remplacé le script existant avec la version la plus récente.