ode45 - Llamar a las funciones de MATLAB desde python
ode45 python (9)
2 opciones más para que tengas en cuenta:
Siga los documentos oficiales de MATLAB: Cree una aplicación Python con el código MATLAB . Esto creará una biblioteca de Python que incluye el tiempo de ejecución de MATLAB al que puede llamar desde su código de Python.
Ejecute su código MATLAB en GNU Octave y luego Oct2Py desde Python usando Oct2Py
¿Es posible ejecutar funciones de MATLAB desde dentro de Python? Busco en internet, solo pude encontrar PyMat. Lo malo es que la versión compilada solo es compatible con Python2.2 y estoy usando 2.6. Así que traté de descargar el código fuente, así que puedo compilarlo para mí. Pero no puedo compilarlo, VC ++ express parece no tener las funcionalidades necesarias para compilarlo. ¿Alguien tiene la versión de compilación para PC? o cualquier sustituto de PyMat? Gracias
Existe un puente python-matlab que es único en el sentido de que Matlab se ejecuta en segundo plano, por lo que no tiene el costo de inicio cada vez que llama a una función de Matlab. https://github.com/jaderberg/python-matlab-bridge
es tan fácil como descargar y el siguiente código:
from pymatbridge import Matlab
mlab = Matlab(matlab=''/Applications/MATLAB_R2011a.app/bin/matlab'')
mlab.start()
res = mlab.run(''path/to/yourfunc.m'', {''arg1'': 3, ''arg2'': 5})
print res[''result'']
donde el contenido de yourfunc.m sería algo como esto:
%% MATLAB
function lol = yourfunc(args)
arg1 = args.arg1;
arg2 = args.arg2;
lol = arg1 + arg2;
end
Me gustaría agregar una opción más al excelente resumen de Lukas:
matlab_wrapper
La ventaja de matlab_wrapper es que es una biblioteca de Python pura y no necesitará compilar nada. Funciona en GNU / Linux, Windows y OSX.
https://github.com/mrkrd/matlab_wrapper
Descargo de responsabilidad: soy el autor de matlab_wrapper
Otra opción es Mlabwrap
:
Mlabwrap es un puente de pitón de alto nivel a Matlab® que permite que Matlab parezca una biblioteca de python normal.
Funciona bien con matrices numpy. Un ejemplo de la página de inicio:
>>> from mlabwrap import mlab; from numpy import *
>>> xx = arange(-2*pi, 2*pi, 0.2)
>>> mlab.surf(subtract.outer(sin(xx),cos(xx)))
Puede utilizar el motor oficial de Matlab instalando Matlab y luego compilando el motor de python a partir de sus archivos externos. Puede consultar el sitio web de la guía a continuación: --- Gracias por el consejo en el primer comentario de esta respuesta --- el paso esencial en breve es (en la plataforma de Windows, otros pueden consultar en la URL a continuación): 1. descargar y luego instale matlab, la versión debe ser R2014 o posterior. 2. abra una ventana de PowerShell bajo admin, luego:
cd "matlabroot/extern/engines/python"
3. use la línea de comando a continuación para instalar:
python setup.py install
El administrador es esencial, o no podrás construirlo.
Para obtener más información, puede hacer clic en la hoja de inicio oficial a continuación: http://cn.mathworks.com/help/matlab/matlab_external/install-the-matlab-engine-for-python.html
PyMat parece que ha sido abandonado.
Supongo que estás en Windows, así que siempre puedes hacer el enfoque más simple y usar la interfaz COM de Matlab:
>>> import win32com.client
>>> h = win32com.client.Dispatch(''matlab.application'')
>>> h.Execute ("plot([0 18], [7 23])")
>>> h.Execute ("1+1")
u''/nans =/n/n 2/n/n''
Más información here
Sé que esta es una vieja pregunta y ha sido respondida. Pero estaba buscando lo mismo (para Mac) y descubrí que hay bastantes opciones con diferentes métodos de interacción con matlab y diferentes niveles de madurez. Esto es lo que encontré:
pymat
Una interfaz de bajo nivel para Matlab que utiliza el motor matlab ( libeng
) para la comunicación (básicamente una biblioteca que viene con matlab). El módulo debe compilarse y vincularse con libeng.
http://pymat.sourceforge.net
Última actualización: 2003
pymat2
Una continuación algo breve del desarrollo de pymat. Parece que funciona en Windows (incluidos 64 bits), Linux y Mac (con algunos cambios).
https://code.google.com/p/pymat2/
Última actualización: 2012
mlabwrap
Una interfaz de alto nivel que también viene como un módulo que necesita compilación y vinculación con libeng
. Expone las funciones de Matlab a Python para que puedas hacer cosas divertidas como
mlab.plot(x, y, ''o'')
Mlabwrap
Última actualización: 2009
mlab
Un esfuerzo de reenvasado de mlabwrap. Básicamente reemplaza el código de c ++ que vincula contra ''libeng'' en mlabwrap con un módulo de python ( matlabpipe ) que se comunica con matlab a través de un conducto. La principal ventaja de esto es que no necesita compilación de ningún tipo.
Desafortunadamente, el paquete actualmente tiene un par de errores y no parece funcionar en absoluto en el mac. Informé algunos de ellos pero finalmente me rendí. Además, prepárate para muchos trucos y un montón de hacks bastante feos si tienes que entrar en el código fuente ;-) Si esto se vuelve más maduro, podría ser una de las mejores opciones.
https://github.com/ewiger/mlab
última actualización: 2013
pymatlab
Un paquete más nuevo (2010) que también interactúa con Matlab a través de libeng
. A diferencia de los otros paquetes, este carga la biblioteca del motor a través de ctypes por lo que no se requiere compilación. No está exento de fallas pero aún se mantiene y los problemas (específicos de Mac de 64 bits) que encontré deberían ser lo suficientemente fáciles de solucionar.
( Editar 2014-05-20 : parece que esos problemas ya se han corregido en la fuente, por lo que las cosas deberían estar bien con 0.2.4)
http://pymatlab.sourceforge.net
última actualización: 2014
puente python-matlab
También un paquete más nuevo que aún se mantiene activamente. Se comunica con Matlab a través de algún tipo de socket. Desafortunadamente las funciones expuestas son un poco limitadas. No pude entender cómo invocar una función que toma estructuras como parámetros. Requiere zmq, pyzmq e IPython que son lo suficientemente fáciles de instalar.
http://arokem.github.io/python-matlab-bridge
última actualización: 2014
vea esta página: Compilador de fuente abierta MATLAB®-a-Python®