2010-02-13 6 views
22

Ein Freund fragte mich, ob er ein kleines Webinterface erstellen könnte, das einige Eingaben akzeptiert, sie an MATLAB zur Zahlenverarbeitung sendet und die Ergebnisse ausgibt. Ich bin von Beruf Python/Django-Entwickler, also kann ich mit der Weboberfläche umgehen, aber ich habe keine Ahnung, wenn es um MATLAB geht. Im Einzelnen:Wie interagiere ich mit MATLAB von Python?

  • Ich würde wirklich wie Hosting dies auf einem Windows-Server zu vermeiden. Gibt es Probleme bei der Ausführung von MATLAB unter Linux mit Skripten, die unter Windows erstellt wurden?
  • Sollte ich in Ausschalen befehlen Befehle oder kompilieren es zu C und ctypes verwenden, um damit zu interagieren?
  • Wenn Kompilieren der richtige Weg ist, sollte ich etwas darüber wissen, wie man es in Python kompiliert und funktioniert? (Es ist eine lange Zeit her, seit ich kompiliert oder mit C gearbeitet habe)

Irgendwelche Vorschläge, Tipps oder Tricks, wie man das abzieht?

+7

Beachten Sie, dass dies gegen die MATLAB-Lizenz verstößt. Vielleicht, wenn Sie an einer Universität sind, würden Sie damit durchkommen, aber für MATLAB benötigen Sie eine Lizenz für jeden _end Benutzer_ - also jeden, der Ihre Webschnittstelle benutzen wird. Ich habe versucht, einige computergestützte Webdienste einzurichten, und uns wurde diese Anforderung mitgeteilt - am Ende mussten wir den Matlab-Compiler verwenden, um eine eigenständige ausführbare Datei zu erstellen, die diese Einschränkung nicht hat (oder komplett zu Python wechseln - Numpy/Scipy/Matplotlib) bieten einen ziemlich umfassenden Ersatz). – robince

Antwort

-1

Vielleicht finden Sie nützliche Informationen finden hier

PyMat - An interface between Python and MATLAB

+2

-1 - Entschuldigung, aber das ist wirklich veraltet und wird wahrscheinlich Probleme haben, es zu bauen (die Dokumente beziehen sich immer noch auf Numerisch) ... mlabwrap ist der Weg zu gehen (aktiv gepflegt und arbeitet mit den letzten Matlab) – robince

12

einen Blick auf mlabwrap nehmen, die Sie Matlab über eine Python-API

+1

ich Sekunde mlabwrap. Obwohl ich eine reine Python-Lösung wie numpy bevorzugen würde, verwende ich mlabwrap, um einige Daten aus der Datei zu lesen, sie in Python vorzuleiten, an Matlab zu senden und dann die Ergebnisse zu erhalten. Sie haben möglicherweise Probleme mit dem Starten der Matlab-Umgebung, wenn eine Anfrage kommt. –

+2

Ich stimme auch zu, dass mlabwrap wahnsinnig einfach zu bedienen ist. Wie Amac sagte, ist der Overhead jedoch ziemlich signifikant.Um ein paar Zahlen zu setzen, benötigt eine Berechnung, die ich verwende (function optimization.lsqlin), 0,01 Sekunden, um sie beim Aufruf von Matlab zu beenden, aber wenn sie von python mit den gleichen Parametern mit mlabwrap aufgerufen wird, dauert es 0,30 Sekunden. – Spike

+0

Eine Fortsetzung des Projekts: [mlab] (https://github.com/ewiger/mlab) – gaborous

1

In Bezug auf OS-Kompatibilität aufrufen können, wenn Sie die Matlab-Version verwenden Für Linux sollten die in Windows geschriebenen Skripts ohne Änderungen funktionieren. Wenn möglich, können Sie auch die Möglichkeit in Betracht ziehen, alles mit Python zu machen. Scipy/numpy mit Matplotlib bieten einen kompletten Matlab-Ersatz.

14

Es gibt eine python-matlab bridge, die in dem Sinne einzigartig ist, dass Matlab im Hintergrund als Server läuft, so dass Sie nicht jedes Mal, wenn Sie eine Matlab-Funktion aufrufen, die Startkosten haben.

es ist so einfach wie das Herunterladen und den folgenden Code:

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

wo der Inhalt yourfunc.m etwas so sein würde:

%% MATLAB 
function lol = yourfunc(args) 
    arg1 = args.arg1; 
    arg2 = args.arg2; 
    lol = arg1 + arg2; 
end 
Verwandte Themen