2010-02-13 6 views
22

Un ami m'a posé des questions sur la création d'une petite interface Web qui accepte certaines entrées, les envoie à MATLAB pour le calcul des nombres et affiche les résultats. Je suis un développeur Python/Django par métier, donc je peux gérer l'interface web, mais je suis complètement désemparé quand il s'agit de MATLAB. Plus précisément:Comment interagir avec MATLAB à partir de Python?

  • Je serais vraiment veulent éviter d'hébergement ceci sur un serveur Windows. Des problèmes pour faire fonctionner MATLAB sous Linux avec des scripts créés sous Windows?
  • Devrais-je examiner les commandes de décorticage ou les compiler en C et utiliser ctypes pour interagir avec lui?
  • Si la compilation est le chemin à parcourir, y a-t-il quelque chose que je devrais savoir pour le compiler et travailler en Python? (Cela fait longtemps que je n'ai pas compilé ou travaillé avec C)

Des suggestions, des astuces ou des astuces pour réussir?

+7

Notez que cela serait en violation de la licence MATLAB. Peut-être que si vous êtes dans une université, vous vous en tirerez, mais pour MATLAB, vous avez besoin d'une licence pour chaque utilisateur, c'est-à-dire tous ceux qui vont utiliser votre interface web. J'essayais d'installer des services web computationnels et on nous a parlé de cette exigence - à la fin nous avons dû utiliser le compilateur Matlab pour créer un exécutable autonome qui n'a pas cette restriction (ou passer complètement à Python - Numpy/Scipy/Matplotlib fournir un remplacement assez complet). – robince

Répondre

-1

Peut-être vous trouverez des informations utiles ici

PyMat - An interface between Python and MATLAB

+2

-1 - désolé mais c'est vraiment démodé et aura probablement du mal à le construire (les docs se réfèrent toujours à Numeric) ... mlabwrap est le chemin à parcourir (maintenu actif et fonctionne avec matlab récent) – robince

12

Jetez un oeil à mlabwrap qui vous permet d'appeler Matlab via une API python

+1

I second mlabwrap. Cependant, je préférerais une pure solution Python comme numpy, j'utilise actuellement mlabwrap pour lire des données à partir d'un fichier, le pré-traiter en Python, envoyer à Matlab et ensuite obtenir les résultats. Vous pouvez rencontrer des problèmes de démarrage de l'environnement Matlab à chaque fois qu'une demande arrive. –

+2

Je suis également d'accord que mlabwrap est incroyablement facile à utiliser. Cependant, comme l'a dit Amac, les frais généraux sont assez importants.Pour mettre des nombres à cela, un calcul que j'utilise (function optimization.lsqlin) prend 0,01 secondes pour terminer en l'appelant depuis matlab, mais quand on l'appelle depuis python avec les mêmes paramètres en utilisant mlabwrap, il prend 0,30 secondes pour finir. – Spike

+0

Une continuation du projet: [mlab] (https://github.com/ewiger/mlab) – gaborous

1

En ce qui concerne la compatibilité du système d'exploitation, si vous utilisez la version Matlab Pour Linux, les scripts écrits dans Windows devraient fonctionner sans aucun changement. Si possible, vous pouvez également envisager la possibilité de tout faire avec python. Scipy/numpy avec Matplotlib fournissent un remplacement complet de Matlab.

14

Il existe un python-matlab bridge unique en ce sens que Matlab s'exécute en arrière-plan en tant que serveur, de sorte que vous n'avez pas le coût de démarrage chaque fois que vous appelez une fonction Matlab.

il est aussi facile que le téléchargement et le code suivant:

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'] 

où le contenu de yourfunc.m serait quelque chose comme ceci:

%% MATLAB 
function lol = yourfunc(args) 
    arg1 = args.arg1; 
    arg2 = args.arg2; 
    lol = arg1 + arg2; 
end 
Questions connexes