2010-02-13 11 views
22

Un amigo me preguntó acerca de la creación de una pequeña interfaz web que acepta algunas entradas, las envía a MATLAB para el cálculo de números y muestra los resultados. Soy un desarrollador de Python/Django, así que puedo manejar la interfaz web, pero no tengo idea cuando se trata de MATLAB. Específicamente:¿Cómo interactúo con MATLAB desde Python?

  • que había realmente gustaría evitar acoger esta en un servidor Windows. ¿Algún problema para ejecutar MATLAB en Linux con scripts creados en Windows?
  • ¿Debo buscar comandos de desgranar o compilarlo en C y usar ctypes para interactuar con él?
  • Si la compilación es el camino a seguir, ¿hay algo que deba saber sobre cómo compilarlo y trabajar en Python? (Ha pasado mucho tiempo desde que compilé o trabajé con C)

¿Alguna sugerencia, sugerencia o trucos sobre cómo llevarlo a cabo?

+7

Tenga en cuenta que esto sería una violación de la licencia de MATLAB. Quizás si estás en una universidad te saldrías con la tuya, pero para MATLAB necesitas una licencia para cada usuario final, es decir, todos los que vayan a utilizar tu interfaz web. Estaba intentando configurar algunos servicios web computacionales y se nos informó de este requisito: al final tuvimos que usar el compilador de Matlab para crear un ejecutable independiente que no tiene esta restricción (o cambiar a Python por completo) - Numpy/Scipy/Matplotlib proporcionar un reemplazo bastante completo). – robince

Respuesta

-1

Tal vez usted encontrará información útil aquí

PyMat - An interface between Python and MATLAB

+2

-1 - lo siento, pero esto está realmente desactualizado y puede tener problemas para conseguirlo (los documentos aún se refieren a Numeric) ... mlabwrap es el camino a seguir (mantenido activamente y funciona con matlab reciente) – robince

12

Tome un vistazo a mlabwrap, que le permite llamar a Matlab a través de una API Python

+1

I second mlabwrap. Sin embargo, preferiría una solución pura de Python como Numpy, actualmente estoy usando mlabwrap para leer algunos datos del archivo, preprocesarlos en Python, enviarlos a Matlab y luego obtener los resultados. Puede tener problemas generales al iniciar el entorno de Matlab cada vez que recibe una solicitud. –

+2

También estoy de acuerdo en que mlabwrap es terriblemente fácil de usar. Sin embargo, como dijo Amac, la sobrecarga es bastante significativa.Para poner algunos números a esto, un cálculo que estoy usando (función de optimización.lsqlin) toma 0.01 segundos para terminar cuando lo llamo desde matlab, pero cuando lo llama desde python con los mismos parámetros usando mlabwrap toma 0.30 segundos para terminar. – Spike

+0

Una continuación del proyecto: [mlab] (https://github.com/ewiger/mlab) – gaborous

1

En cuanto a la compatibilidad del sistema operativo, si se utiliza la versión de MATLAB para Linux, los guiones escritos en Windows deberían funcionar sin ningún cambio. Si es posible, también puede considerar la posibilidad de hacer todo con Python. Scipy/numpy con Matplotlib proporciona un reemplazo completo de Matlab.

14

Hay un python-matlab bridge que es único en el sentido de que Matlab se ejecuta en segundo plano como servidor, por lo que no tiene el costo de inicio cada vez que llama a una función de Matlab.

Es tan fácil como descargar y el código siguiente:

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 
Cuestiones relacionadas