variable valor usuario una teclado solicitar obtener numero introducir ingresar datos dato como capturar cadena python matlab octave lapack

valor - ¿Cómo puedo acceder a un módulo de matlab/octava desde Python?



introducir un valor en python (3)

¿Ha considerado usar OMPC, http://ompc.juricap.com/ ? Lo he usado con gran éxito cuando no quería volver a escribir algunas rutinas numéricas de álgebra lineal. Puedo imaginar que cuanto más esotérico sea el Matlab, más difícil será traducirlo ... pero podría valer la pena intentarlo. Al final, querrá convertir su código de Matlab a Python porque será un cuello de botella en velocidad y rendimiento. La única razón para dejar el código Matlab en formato Matlab es si sería un enorme costo inicial traducirlo todo, lo que OMPC debería mitigar un poco. De lo contrario, casi siempre vale la pena ese costo inicial para deshacerse por completo de la dependencia de Matlab / Octave.

Estoy buscando una manera de acceder a un módulo de matlab de python. Mi situación actual es esta:

  • Tengo un código python que realiza cálculos numéricos llamando a las rutinas de Lapack mientras que la memoria se asigna como ctypes y se pasa como punteros a las rutinas de Lapack.
  • También tengo un módulo matlab, que es compatible con octava, que hace algunos trucos matemáticos que quiero usar.

Mi pregunta ahora es esta:
¿Cuál es una forma eficiente de mantener todo el trabajo principal en python mientras que al mismo tiempo explotan las posibilidades que ofrecen los módulos de matlab / octava? También sería agradable, si mis matrices de tipo c no tienen que convertirse en algún otro objeto para ejecutar octava. Sin embargo, puedo ver que ese último punto es difícil de lograr.

Mi investigación actual me muestra dos posibles opciones:

  1. Pytave : Sin embargo, parece que este paquete es una especie de pre alfa?
  2. Vaya por esta carretera jorobada: archivo ctypes -> * .mat (a través de numpy) -> octava -> * archivo .mat -> ctypes (a través de numpy)

Puedes usar oct2py , que IIUC fue iniciado por su autor porque pytave no funcionó en win32. Se utiliza con éxito en IPython a través de su extensión octavemagic y puedo decir que es fácil de usar por sí mismo, el código se mantiene (informé un pequeño error Unicode y el autor lo solucionó en un día) y funciona bien. La mayoría de las veces es tan simple como:

>>> from oct2py import octave >>> octave.run("cos(pi / 3)") ''ans = 0.50000'' >>> octave.call("foo", a, b) # Function in foo.m

Para ver más ejemplos, puedes consultar este artículo de blog .


Tuve algunos problemas para hacer que OMPC funcione porque (I) el módulo md5 está en desuso, (II) Python 2.6 y versiones posteriores ya no aceptan argumentos para Object .__ new __ () u Object .__ init __ (), y (III) byteplay.py script necesitaba ser actualizado.

Para resolver el problema (I), cambié la línea 74 de yacc.py que se encuentra en el directorio ompc /. Esta línea importa md5 entre otras cosas. Eliminé el módulo md5 y agregué la siguiente línea:

from hashlib import md5

Más adelante en el script yacc.py, en la línea 1160, cambié,

Signature = md5.new()

a lo siguiente,

Signature = md5()

Para ejecutar el código generado por ompcply.py, agregue ''from ompc import *'' al principio del archivo y luego ejecútelo con una versión anterior de Python, como:

$ python2.5 ompcply.py script.m > newscript.pym $ python2.5 newscript.pym

Usar una versión de Python posterior a 2.5 le dará el siguiente error:

/home/connor/downloads/OMPC/ompclib/ompclib_numpy.py:66: DeprecationWarning: object.__new__() takes no parameters a = super(mvar, cls).__new__(cls, *args, **kwargs)

Para resolver el problema (III) busqué en Google byteplay, y reemplacé el script existente con la versión más nueva.