Weiche Frage: Wo passt Python ins Bild?

9

Ich habe überlegt, ob ich Python lernen soll oder nicht. Aus dem Gespräch mit meinen Professoren scheint Matlab die gemeinsame Sprache in der angewandten Mathematik / Computational Science verwendet werden, soweit die Wissenschaft angeht; Während meiner Zeit in der Industrie haben meine Professoren (insbesondere diejenigen, die in der Industrie gearbeitet haben) gesagt, dass das Erlernen von C ++ der sicherste Weg ist.

Ich würde gerne von Ihnen, sowohl in der Wissenschaft als auch in der Industrie, hören, ob ich mich überhaupt mit Python beschäftigen oder nur wirklich gut in dem werden sollte, was ich vorerst weiß (MATLAB und C ++).

Update : Geoff bringt einen guten Punkt vor, ich sollte wahrscheinlich noch einige Details festlegen:

Ich bin derzeit ein Student in meinem letzten Jahr und studiere Mathematik mit einer Spezialisierung auf Rechnen. Ich möchte eine Graduiertenschule besuchen und in der Forschung bleiben (ich habe noch nie Spaß am Unterrichten gesehen) oder in einem Labor arbeiten. Beide sind ideal. In Bezug auf welche Forschungsbereiche wahrscheinlich etwas im Sinne der numerischen Analyse oder der Wahrscheinlichkeit. Falls Plan A nicht funktioniert, wäre ich offen für die Arbeit in der Industrie, solange die Vorbereitung auf die Industrie nicht zu viel Zeit für die Schule kostet. Also dachte ich mir, ich sollte die in der Industrie üblichen Sprachen nur als Backup lernen. Aber das ist auch der Grund, warum ich in Konflikt gerate. Ich kann nicht jede Sprache lernen oder mich auf jede Möglichkeit vorbereiten, da dies viel zu viel Zeit in Anspruch nehmen würde.

AlanH
quelle
1
Ihre Frage ist gut, aber wahrscheinlich etwas zu offen und vage. Welche Disziplin studierst du und was denkst du, möchtest du vielleicht tun?
Geoff Oxberry
1
Ein Beispiel für Dinge, die mit Python ausgeführt werden können und in MATLAB oder reinem C ++ nicht gut funktionieren: epubs.siam.org/doi/abs/10.1137/110856976 . (Schamlose Eigenwerbung Alarm)
David Ketcheson

Antworten:

15

Eine Schwierigkeit bei jeder dieser Arten von Fragen besteht darin, dass die Antwort stark von der Community abhängt.

So beantworten Sie einige Ihrer Fragen in zufälliger Reihenfolge:

MATLAB wird sowohl in der Wissenschaft als auch in der Industrie häufig eingesetzt. Einer der Gründe, warum es in der Industrie häufig verwendet wird, ist, dass es in der Wissenschaft unterrichtet wird. Ich weiß, dass MATLAB im Lincoln Laboratory und in den Forschungs- und Entwicklungsabteilungen von DuPont eingesetzt wird.

In Python sind Softwarepakete geschrieben, die sich gut für symbolische Berechnungen eignen, z. B. Sympy und SAGE. Abhängig von Ihren speziellen Interessen, Funktionsanforderungen und persönlichen Vorlieben kann Mathematica (oder Maple oder andere Computeralgebrasysteme) diesen Paketen überlegen sein.

MATLAB verfügt über eine Symbolic Math Toolbox, die für einige symbolische Berechnungen verwendet werden kann, aber die symbolischen Manipulationsfunktionen sind meiner Erfahrung nach schwächer als bei Mathematica und Python. Einige symbolische Manipulationen könnten theoretisch in C ++ durchgeführt werden, sind jedoch unhandlich. MATLAB ist auch keine gute Allzwecksprache. Es macht lineare Algebra und numerische Mathematik gut, hat aber keine guten Eingabe- / Ausgabefähigkeiten. Es verfügt im Vergleich zu C ++ oder Python nicht über gute parallele Funktionen (obwohl es Varianten wie paralleles MATLAB, MATLAB Star-P und die Parallel Computing Toolbox gibt). Sogar seine Grafikfähigkeiten könnten etwas Arbeit gebrauchen. MATLAB ist auch teuer, es sei denn, Sie sind mit einer Institution verbunden, die über eine Lizenz verfügt. Jeder Werkzeugkasten ist teuer in der Anschaffung und kostet in der Regel Hunderte bis Tausende von Dollar.

Mathematica führt neben der symbolischen Berechnung auch numerische Berechnungen durch. Ich habe nicht gesehen, dass Leute es für numerische Berechnungen verwenden, so wie ich gesehen habe, wie Leute Python und MATLAB für numerische Arbeiten verwenden. Es verfügt ebenfalls über parallele Funktionen, lässt sich jedoch nicht auf große Supercomputer skalieren.

Python ist eine gute Allzwecksprache, die als leicht zu erlernen und verwendbar angesehen wird. Es wird auf großen Supercomputern verwendet (siehe z. B. PyClaw ,haustc4py, mpi4py und andere) und lässt sich gut skalieren. Es hat auch hoch angesehene numerische Pakete (wie NumPy und SciPy); eine große, aktive Gemeinschaft; gute Ein- / Ausgabeverarbeitungsfähigkeiten; und gute Grafikbibliotheken sowie ein großes Repository an Bibliotheken (siehe PyPI). Es ist kostenlos im Vergleich zu den oben genannten proprietären Paketen. Sie finden die meisten Funktionen von MATLAB oder Mathematica in frei verfügbaren Python-Paketen. Der Hauptnachteil von Python besteht darin, dass es tendenziell langsamer ist als kompilierte Sprachen wie C ++, obwohl dieser Nachteil mit der Weiterentwicklung von Cython, Numba und PyPy abnimmt. Es kann auch gemildert werden, indem langsamerer Python-Code durch C- (oder C ++ oder Fortran-) Code und entsprechend geschriebene Python-Wrapper ersetzt wird. Bei der Interpretation berichten viele Menschen von einer höheren Produktivität mit Python als mit kompilierten Sprachen. Es ist sehr beliebt und wahrscheinlich lohnenswert zu lernen, wenn Sie Zeit haben.

C ++ ist eine komplizierte Sprache und ihre Verwendung in der Computerwissenschaft ist umstritten. Dank seines umfangreichen Funktionsumfangs ist es einfach, Software zu schreiben, deren Wartung schwierig ist und deren Kompilierung ewig dauert. Mit Bedacht eingesetzt, können Funktionen wie Vorlagen und Überladen von Bedienern jedoch sehr effektiv eingesetzt werden, wie dies unter anderem bei Projekten wie deal.II, Blaze und Elemental der Fall war. C ++ hat eine steile Lernkurve, wenn es um seine erweiterten Funktionen geht, und ich habe anekdotische Berichte von Menschen gehört, die Jahre gebraucht haben, um das Gefühl zu haben, die volle Sprache gelernt zu haben. Trotz der Bedenken hinsichtlich der Benutzerfreundlichkeit und des komplizierten Funktionsumfangs ist es auch eine beliebte Sprache. Es lohnt sich wahrscheinlich zu lernen, wenn auch nur, um sich beschäftigungsfähiger zu machen; Die Hauptkonkurrenten in der Computerwissenschaft sind Fortran und C, die es ebenfalls wert sind, gelernt zu werden.

Was auch immer Sie lernen möchten, hängt davon ab, was Sie tatsächlich benötigen. Sicher, es ist schön, sowohl Python als auch C ++ zu lernen, aber angesichts der Zeit- und Ressourcenbeschränkungen werden Sie wahrscheinlich nur lernen, was Sie tatsächlich benötigen, und das hängt von der Community ab, in der Sie arbeiten.

Geoff Oxberry
quelle
Was die Wissenschaft betrifft, würden Sie sagen, dass es besser ist, Zeit in das Erlernen von Python zu investieren, anstatt in C ++?
AlanH
1
Auch das hängt alles davon ab. Ich bin immer noch eher akademisch und benutze Python die ganze Zeit. Ich muss auch noch C ++ für Arbeiten verwenden, die in dieser Sprache geschrieben sind. Meine persönliche Meinung ist, dass sich das Erlernen von Python für Sie wahrscheinlich schneller auszahlt als wenn Sie zuerst C ++ gelernt haben, aber ich weiß nicht, welche Probabilisten / stochastischen Prozesse / Kombinatoriker verwendet werden, sodass Ihre Laufleistung variieren kann.
Geoff Oxberry
Ich würde Geoff zustimmen, dass es eine gute Idee ist, zuerst Python zu lernen, da Sie dadurch viel schneller loslegen können. C ++ ist eine gute Sprache, aber die Lernkurve ist deutlich höher und das halbherzige Lernen ist wohl schlimmer als gar nicht zu lernen.
LKlevin
"C ++ hat eine steile Lernkurve, wenn es um erweiterte Funktionen geht, und ich habe vereinzelte Berichte von Menschen gehört, die Jahre gebraucht haben, um das Gefühl zu haben, die volle Sprache gelernt zu haben." Ja, ich könnte nicht mehr zustimmen. Ich denke, dass jeder Programmierer, der sein Geld wert ist, einige Zeit in seinem Leben C / C ++ lernen sollte, aber es wird definitiv 10000 Stunden dauern, bis Sie sich wirklich als Experte mit ihnen fühlen. +1
James
11

Wie Misha und Geoff Oxberry betonten, hat Mathematica wirklich einen anderen Fokus (nur weil man mit einem Schraubenzieher in einen Nagel schlagen kann, heißt das nicht, dass man es sollte). Ich nehme Ihre Frage als "Wenn ich Matlab kenne, warum sollte ich Python lernen?" [Bearbeiten: und anscheinend auch Sie.]

Matlab ist in jeder Hinsicht das Englisch des wissenschaftlichen Rechnens - mit all den positiven und negativen Konnotationen, die diese Analogie mit sich bringt. Ein besonders guter Punkt ist, dass Matlab-Code wahrscheinlich für mehr Menschen nützlich (dh ausführbar und verständlich) ist als Code in einer anderen Sprache. (Dies ist der Hauptgrund, warum ich Matlab-Codes für alle meine Algorithmen bereitstelle.) Außerdem kann der Matlab-Desktop beim Prototyping sehr nützlich sein, insbesondere bei der Ausführung von Codebits (Zellen) direkt aus dem Editor sowie dem integrierten Code. im Profiler.

Abgesehen davon, wenn Sie aus Spaß und Gewinn eine andere Hochsprache lernen möchten, könnten Sie schlechter abschneiden als Python. Einige Gründe zusätzlich zu dem, was Geoff aufgelistet hat:

  • Es ist viel einfacher, mit externen Programmen und Bibliotheken in Python zu kommunizieren. Keine mex-Dateien mehr!

  • Wenn Sie nicht auf Ihrem Desktop sind, ist es viel einfacher, Python + NumPy / SciPy zum Laufen zu bringen, als auf eine Matlab-Lizenz zuzugreifen.

  • Der Hauptgrund, warum Matlab schneller als NumPy ist, besteht darin, dass optimierte Herstellerbibliotheken für die lineare Algebra (MKL, ACML) gebündelt werden. Es ist möglich ( wenn auch etwas langweilig ), ein eigenes NumPy zu erstellen und es mit denselben Bibliotheken zu verknüpfen, um nahezu die gleiche Leistung (und Multithreading) wie Matlab für lineare Algebra sowie die bessere Leistung von Python für alles andere zu erzielen. (Obwohl dies natürlich auch für den akademischen Gebrauch eine Lizenz erfordert, wodurch der Bonus für freie Software negiert wird, ist es immer noch eine interessante Option, denselben Code für eine vom Arbeitgeber gesponserte beschleunigte Installation im Büro sowie für eine Standardinstallation zu verwenden auf Ihrem Heimcomputer oder Notebook installieren.)

  • Während die Toolboxen von Matlab eines der Verkaufsargumente sind, gibt es einige Bereiche, in denen Python weit voraus ist. Insbesondere SymPy und FEniCS schlagen die Toolboxen Symbolic und PDE um ein Vielfaches .

  • Sie nicht den Spaß Teil (semantische Leerzeichen und vergessen Namensbindung ungeachtet): Ich habe mehrere Kollegen gesehen von dem Python Bug gebissen, und es ist wirklich seltsam etwas Befriedigung Ihres Algorithmus in Python in schriftlicher Form , die nicht da in Matlab ( obwohl das vielleicht nur die Freude ist, eine Fremdsprache zu lernen) :)

(Wenn Sie mit NumPy beginnen, ist diese Seite möglicherweise hilfreich.)

Christian Clason
quelle
5

Python kann sowohl C ++ als auch Matlab ersetzen. Es ist sowohl in der Wissenschaft als auch in der Industrie gut verbreitet. In der Industrie wird es manchmal als Klebstoff für untergeordnete Sprachen verwendet, meistens c / c ++. Mathematica ist eine ganz andere Geschichte. Sein Hauptvorteil ist, wo alle anderen genannten (c / c ++; Matlab; Python) nicht gut sind: bei symbolischen Berechnungen.

Alle vier sind also völlig unterschiedlich: c ++ ist eine alte und stabile Programmiersprache auf relativ niedrigem Niveau; Python ist eine neue und sich weiterentwickelnde Computersprache auf hohem Niveau. Matlab ist eine numerische Rechenumgebung mit einem starken Akzent auf Vektoralgebra (obwohl es mehr oder weniger alles kann); Mathematica ist ein Computeralgebrasystem mit einem starken Akzent auf symbolischen Berechnungen (die gleiche Bemerkung wie bei Matlab). Sie sind also keine Konkurrenten.

Mischa
quelle
Tatsächlich; Ich bin oft verwirrt (und manchmal erstaunt), wenn ich sehe, dass Leute Mathematica für wissenschaftliches Rechnen verwenden ...
Christian Clason
@ChristianClason und Misha: Es ist ein Missverständnis, dass Mathematica in erster Linie ein Computeralgebrasystem ist. Wenn Sie sich ansehen, wie die Leute es tatsächlich verwenden , ist das meiste davon keine symbolische Algebra, und in mehreren numerischen Bereichen ist es mit Tools wie MATLAB und R konkurrenzfähig. (Persönlich würde ich Mma für die meisten numerischen Datenverarbeitungsaufgaben gegenüber diesen beiden anderen auswählen , aber das ist natürlich eine persönliche Präferenz.) In einigen Bereichen, wie der numerischen Integration oder Visualisierung, scheint es MATLAB voraus zu sein. Bei anderen wie der PDE-Lösung liegt sie weit zurück.
Szabolcs
Für jemanden, der sich nur für numerisches Rechnen interessiert, ist Python eine Alternative zu MATLAB, einer Sprache auf relativ hohem Niveau, die in ihrer Fähigkeit, Bibliotheksroutinen für standardisierte Berechnungen mit linearer Algebra, Fourier-Transformationen, Sonderfunktionen usw. Zu verwenden, ähnlich ist Ja, Python ist viel umfassender anwendbar, deckt jedoch alles ab, was Sie in MATLAB tun könnten.
Brian Borchers
4

Ich weiß, dass Ihre Frage die Verwendung von Python betrifft, aber Sie sagten, dass Sie an "numerischer Analyse oder Wahrscheinlichkeit" interessiert sind. Ich weiß nicht, ob Sie R in Betracht gezogen haben , aber es wurde speziell für diese Art von Arbeit entwickelt. R ist eine sehr mächtige Sprache für Wahrscheinlichkeit und Statistik und hat eine sehr große und aktive Benutzerbasis von Mathematikern und Wissenschaftlern.

R unterscheidet sich von Matlab in dem Sinne, dass es Open Source ist, einen statistischen Fokus hat und einige sehr beeindruckende Diagramme erstellt (siehe ggplot2 ). Sie können fast alles in R tun, was Sie in Matlab tun können, aber mein Lieblingsaspekt ist der Benutzerbeitrag. Die meisten der beigesteuerten Bibliotheken wurden von Wissenschaftlern verfasst und in einem statistischen Journal veröffentlicht. Sie haben auch sehr gut geschriebene Anleitungen (Referenzen und Vignetten genannt). Meine neue Lieblingsbibliothek bietet CUDA-Unterstützung, die auf den CULA- Bibliotheken basiert (kostenlos für akademische Zwecke). Es gibt auch eine erstaunliche Anzahl von Methoden für die Wahrscheinlichkeitstheorie (siehe hier ).

Wie auch immer, R wurde definitiv speziell für Ihre Arbeit entwickelt. Probieren Sie es aus und fügen Sie es Ihrem Toolkit hinzu :) Denken Sie daran, dass Sie R-Skripte in Python und Python-Skripte in R ausführen und die Ausgaben einfach erfassen können.

Viel Glück!

D.Deriso
quelle
2

Andere haben bereits ausführlich und ausführlicher kommentiert, als ich hier versuchen werde. Ich möchte jedoch noch einmal einen Punkt hervorheben: Es hängt von Ihrer Community ab. Wenn Sie beispielsweise an einem elektrotechnischen Projekt arbeiten, verwenden Sie wahrscheinlich matlab. Dies kann auch der Fall sein, wenn Sie als numerischer Analyst Ihre Schätzung der Konvergenzrate anhand eines einfachen Modellproblems überprüfen möchten.

Auf der anderen Seite, wenn Sie sich für das eigentliche wissenschaftliche Rechnen interessieren (z. B. die Strömung um ein Strömungsprofil simulieren, die Kernfusion in einem Plasma simulieren, die Konvektion im Erdmantel simulieren) oder numerische Methoden für solche Anwendungen entwickeln möchten, dann die Lingua Franca ist C ++. Jedes große wissenschaftliche Computerpaket ist heute in C ++ (oder C) geschrieben, egal ob gut oder schlecht, und so wird es noch lange bleiben. Um nur einige Beispiele zu nennen: PETSc und die unglaublich großen und vielfältigen Trilinos-Pakete sind in C bzw. C ++ geschrieben. Unter den großen Open-Source-Finite-Elemente-Bibliotheken, die ich mir vorstellen kann (libMesh, deal.II, oofem, freefem), ist jede einzelne in C ++ geschrieben. Unter den Visualisierungsprogrammen sind die beiden größten (Visit und Paraview) in C ++ geschrieben. Ich könnte die Liste erweitern.

Der Punkt ist, dass Menschen, die mit kleinen Simulationen zufrieden sind, eine Sprache verwenden, aber wenn es um ernsthafte, möglicherweise parallele Berechnungen geht, verwenden sie alle etwas anderes. Es ist sicher eine Community-Sache, aber auch mit der Interoperabilität - wenn PETSc und Trilinos in C und C ++ geschrieben sind, kann ich (als Autor von deal.II) keine andere Sprache wählen, selbst wenn ich wollte, weil Ich muss mit PETSc und Trilinos arbeiten.

Wolfgang Bangerth
quelle
1
Um fair zu sein, kommen viele PETSc-Benutzer aus Fortran und einige aus Python. C ist aus fast jeder Sprache leicht aufzurufen, obwohl das Programmieren in gemischten Sprachen mit eigenen Herausforderungen verbunden ist und ich es nicht sehr oft empfehle. Das Problem, wo sich Ihr Code im Stapel befindet, wird ebenfalls zu häufig übersehen. Endbenutzeranwendungen sollten andere Entscheidungen für das Software-Design treffen als beispielsweise Bibliotheken auf Systemebene.
Jed Brown
Das ist fair. Es ist jedoch wahr, dass die neueren Instanzen von Software, die in umfangreichen Berechnungen verwendet werden, heutzutage überwiegend in C und C ++ geschrieben sind (trotz älterer Hold-Outs, die in Fortran geschrieben wurden).
Wolfgang Bangerth
1

Um meine zwei Cent hinzuzufügen, habe ich sowohl akademische Erfahrung (ein neuer Doktortitel :)) als auch Branchenerfahrung (ein Hersteller von Vermessungsgeräten).

Wir führen viele numerische Berechnungen auf schwachen eingebetteten Prozessoren durch (denken Sie an Handyprozessoren). Abgesehen davon, dass es kein MATLAB für ARM gibt, ist C ++ der König auf dieser Welt - viele eingebettete Compiler-Suiten enthalten FORTAN nicht!

Obwohl wir nur eine begrenzte Anzahl von MATLAB-Lizenzen haben, verzerrt die Anforderung, ein Produkt mit 2 Watt Leistung zu produzieren, unsere Entwicklungsarbeit zugunsten von C ++ (abgesehen von Experimenten).

Damien
quelle