web-dev-qa-db-ger.com

Ist MATLAB schneller als Python?

Ich möchte Magnetfelder einiger Leiter mit dem Biot-Savart-Gesetz berechnen, und ich möchte eine 1000x1000x1000-Matrix verwenden. Bevor ich MATLAB verwende, möchte ich jetzt Python verwenden. Ist Python langsamer als MATLAB? Wie kann ich Python schneller machen? 

BEARBEITEN: Die beste Möglichkeit ist es, das große Array mit C/C++ zu berechnen und dann in Python zu übertragen. Ich möchte dann mit VPython visualisieren. 

EDIT2: Was ist besser in meinem Fall: C oder C++? 

35
kame

Unterhalb dieses Links finden Sie möglicherweise nützliche Ergebnisse

http://wiki.scipy.org/PerformancePython

Von der Einführung,

Ein Vergleich der Bindung mit NumPy, Pyrex, Psyco, Fortran (77 und 90) und C++ zur Lösung der Laplace-Gleichung.

Es vergleicht auch MATLAB und scheint ähnliche Geschwindigkeiten zu haben wie Python und NumPy .

Natürlich ist dies nur ein konkretes Beispiel, Ihre Anwendung kann eine bessere oder schlechtere Leistung ermöglichen. Es ist nicht schaden, denselben Test für beide durchzuführen und zu vergleichen.

Sie können NumPy auch mit optimierten Bibliotheken wie ATLAS kompilieren, die einige BLAS / LAPACK - Routinen bereitstellt. Diese sollten mit MATLAB vergleichbar sein. 

Ich bin nicht sicher, ob die NumPy-Downloads bereits dagegen erstellt wurden, aber ich denke, ATLAS wird Bibliotheken an Ihr System anpassen, wenn Sie NumPy kompilieren.

http://www.scipy.org/Installing_SciPy/Windows

Der Link enthält weitere Informationen zu den Anforderungen der Windows-Plattform.

BEARBEITEN:

Wenn Sie herausfinden möchten, was besser ist, C oder C++, sollten Sie eine neue Frage stellen. Obwohl aus dem Link oben C++ die beste Leistung bietet. Andere Lösungen sind auch ziemlich nahe, d. H. Pyrex, Python/Fortran (mit f2py) und Inline-C++.

Die einzige Matrixalgebra unter C++, die ich je gemacht habe, war die Verwendung von MTL und die Implementierung eines erweiterten Kalman-Filters. Ich denke jedoch, es hängt im Wesentlichen davon ab, welche Bibliotheken Sie LAPACK/BLAS verwenden und wie gut es optimiert ist. 

Dieser Link enthält eine Liste objektorientierter numerischer Pakete für viele Sprachen.

http://www.oonumerics.org/oon/

27
petantik

NumPy und MATLAB verwenden eine zugrunde liegende BLAS -Implementierung für lineare Algebra-Standardoperationen. Seit einiger Zeit verwenden beide ATLAS , aber heutzutage hat MATLAB anscheinend auch andere Implementierungen wie Intels Math Kernel Library (MKL). Welche davon schneller ist, hängt davon ab, wie stark die BLAS-Implementierung kompiliert wurde. Sie können NumPy auch mit MKL kompilieren, und Enthought arbeitet an der MKL-Unterstützung für ihre Python-Distribution (siehe roadmap ). Hier ist auch ein aktueller interessanter Blogbeitrag zu diesem Thema.

Wenn Sie dagegen spezialisiertere Operationen oder Datenstrukturen benötigen, bieten Ihnen Python und MATLAB verschiedene Möglichkeiten zur Optimierung (z. B. Cython , PyCUDA , ...).

Bearbeiten: Ich habe diese Antwort korrigiert, um verschiedene BLAS-Implementierungen zu berücksichtigen. Ich hoffe, es ist jetzt eine faire Darstellung der aktuellen Situation.

19
nikow

Der einzig gültige Test besteht darin, einen Benchmark zu erstellen. Es hängt wirklich davon ab, was Ihre Plattform ist und wie gut das Biot-Savart-Gesetz Matlab- oder NumPy/SciPy-Vorgängen zugeordnet ist.

Um Python schneller zu machen, arbeitet Google an Unladen Swallow, einem JIT-Compiler für Python. Es gibt wahrscheinlich auch andere Projekte wie diese.

7
Mike DeSimone

Laut Edit 2 empfehle ich dringend, Fortran zu verwenden, da Sie die verfügbaren linearen Algebra-Subroutinen (Lapack und Blas) nutzen können und es bei Matrixberechnungen wesentlich einfacher ist als C/C++.

Wenn Sie sich für einen C/C++ - Ansatz entscheiden, würde ich C verwenden, da Sie vermutlich eine reine Performance für eine vermutlich einfache Schnittstelle benötigen (Matrixberechnungen haben meist einfache Schnittstellen und komplexe Algorithmen).

Wenn Sie sich jedoch für C++ entscheiden, können Sie TNT (das Template Numerical Toolkit, die C++ - Implementierung von Lapack) verwenden.

Viel Glück.

4
Escualo

Wenn Sie nur Python (mit NumPy) verwenden, kann es langsamer sein, abhängig davon, welche Teile Sie verwenden, ob Sie optimierte lineare Algebra-Bibliotheken installiert haben oder nicht, und wie gut Sie wissen, wie Sie NumPy nutzen können. 

Um es schneller zu machen, gibt es einige Möglichkeiten, die Sie tun können. Es gibt ein Werkzeug namens Cython , mit dem Sie Typdeklarationen zu Python-Code hinzufügen und in ein Python-Erweiterungsmodul in C übersetzen können. Wie viel Nutzen dies bringt, hängt ein wenig davon ab, wie sorgfältig Sie mit Ihren Typdeklarationen sind. Wenn Sie überhaupt nichts hinzufügen, werden Sie keinen Nutzen davon sehen. Cython unterstützt auch NumPy-Typen, diese sind jedoch etwas komplizierter als andere Typen.

Wenn Sie über eine gute Grafikkarte verfügen und ein wenig über GPU-Computing lernen möchten, kann PyCUDA auch hilfreich sein. (Wenn Sie keine NVIDIA-Grafikkarte haben, habe ich gehört, dass auch ein PyOpenCL in den Werken ist). Ich kenne Ihre Problemdomäne nicht, aber wenn sie einem CUDA-Problem zugeordnet werden kann, sollte sie in der Lage sein, Ihre 10 ^ 9-Elemente gut zu handhaben.

3
kwatford

Und hier ist ein aktualisierter "Vergleich" zwischen MATLAB und NumPy / MKL basierend auf einigen linearen Algebra-Funktionen:

http://dpinte.wordpress.com/2010/03/16/numpymkl-vs-matlab-performance/

Das Punktprodukt ist nicht so langsam ;-)

2
user294958

Ich möchte auch darauf hinweisen, dass Python (+ NumPy) problemlos über das F2Py-Modul mit Fortran verbunden werden kann, wodurch grundsätzlich native Fortran-Geschwindigkeiten für die darin enthaltenen Codeteile entstehen.

0
Connor Glosser

Ich konnte keine harten Zahlen finden, um dieselbe Frage zu beantworten, also habe ich die Tests selbst gemacht. Die Ergebnisse, Skripte und Datensätze, die verwendet werden, sind hier in meinem Beitrag zu MATLAB vs. Python-Geschwindigkeit für die Schwingungsanalyse verfügbar.

Um es kurz zu sagen: Die FFT-Funktion in MATLAB ist besser als Python, aber Sie können einige einfache Manipulationen vornehmen, um vergleichbare Ergebnisse und Geschwindigkeit zu erzielen. Ich fand auch, dass der Import von Daten schneller in Python im Vergleich zu MATLAB war (selbst für MAT-Dateien, die scipy.io verwenden).

0
Steve