Beste Sprachen für wissenschaftliches Rechnen [geschlossen]

10

Es scheint, als ob in den meisten Sprachen eine Reihe von wissenschaftlichen Computerbibliotheken verfügbar sind.

  • Python hat Scipy
  • Rust hat SciRust
  • C++hat mehrere einschließlich ViennaCLundArmadillo
  • Javahat Java Numericsund Coltsowie mehrere andere

Ganz zu schweigen von Sprachen wie Rund Juliaexplizit für das wissenschaftliche Rechnen konzipiert.

Wie wählen Sie bei so vielen Optionen die beste Sprache für eine Aufgabe aus? Welche Sprachen sind außerdem am leistungsfähigsten? Pythonund Rscheinen die größte Traktion im Raum zu haben, aber logischerweise scheint eine kompilierte Sprache eine bessere Wahl zu sein. Und wird jemals etwas besser abschneiden Fortran? Zusätzlich haben kompilierte Sprachen tendenziell eine GPU-Beschleunigung, während interpretierte Sprachen dies mögen Rund Pythonnicht. Was muss ich bei der Auswahl einer Sprache berücksichtigen und welche Sprachen bieten das beste Gleichgewicht zwischen Nutzen und Leistung? Gibt es auch Sprachen mit bedeutenden wissenschaftlichen Computerressourcen, die ich vermisst habe?

RagingSloth
quelle
12
Hier gibt es keine Frage. Wenn Sie Grundlagenforschung zur Programmiersprache betreiben müssen, lesen Sie besser Wikipedia, als darauf zu warten, dass jemand hier auftaucht, um sein Steckenpferd zu schieben.
Dirk Eddelbuettel
@ KirkEddelbuettel Sehr guter Punkt. Ich dachte, es wäre besser, Inhalte zu produzieren, als sie zu diesem Zeitpunkt in der Beta zu verfeinern, aber ich weiß nicht viel über SE-Betas. War das ein guter Schachzug von meiner Seite oder nicht?
Indico
1
Schau dir diese Zahlen an.
Emre
@DirkEddelbuettel Sie sind nicht falsch, aber meine Hoffnung war es, eine Diskussion über die nützlichen Eigenschaften und Werkzeuge zu fördern, die mit verschiedenen Sprachen verbunden sind. Die Sprache, die Sie verwenden, ist ein wichtiges Werkzeug in der Datenwissenschaft. Meiner Meinung nach konnten die Leute die von ihnen bevorzugten Werkzeuge und ihre objektiven Vorteile als Ressource für diejenigen diskutieren, die ähnliche Arbeiten versuchen möchten.
RagingSloth
1
@indico Probieren Sie cran.r-project.org/web/packages/overlap/index.html aus. Dies ist nur der erste, den ich zufällig ausgewählt habe. Aber wirklich, ich persönlich habe viele Statistiker gekannt, die R-Pakete geschrieben haben. Keiner von ihnen hat bisher eine Python geschrieben. Um das Gespräch ein wenig zu erweitern, ist kdnuggets.com/2013/08/… interessant.
Lembik

Antworten:

12

Dies ist eine ziemlich umfangreiche Frage, daher ist dies keine vollständige Antwort, aber hoffentlich kann dies dazu beitragen, die allgemeine Praxis über die Ermittlung des besten Tools für den Job in Bezug auf Datenwissenschaft zu informieren. Im Allgemeinen habe ich eine relativ kurze Liste von Qualifikationen, nach denen ich suche, wenn es um ein Werkzeug in diesem Bereich geht. In keiner bestimmten Reihenfolge sind sie:

  • Leistung : Grundsätzlich läuft es darauf hinaus, wie schnell die Sprache die Matrixmultiplikation durchführt, da dies mehr oder weniger die wichtigste Aufgabe in der Datenwissenschaft ist.
  • Skalierbarkeit : Zumindest für mich persönlich kommt es darauf an, ein verteiltes System einfach aufzubauen. Dies ist irgendwo, wo Sprachen wie Juliawirklich glänzen.
  • Community : Mit jeder Sprache suchen Sie wirklich nach einer aktiven Community, die Ihnen helfen kann, wenn Sie mit dem von Ihnen verwendeten Tool nicht weiterkommen. Hier liegt es pythonweit vor den meisten anderen Sprachen.
  • Flexibilität : Nichts ist schlimmer, als durch die von Ihnen verwendete Sprache eingeschränkt zu sein. Es kommt nicht sehr oft vor, aber der Versuch, Graphstrukturen in darzustellen, haskellist ein berüchtigter Schmerz und Juliaist mit vielen Schmerzen in der Codearchitektur behaftet, weil man eine so junge Sprache ist.
  • Benutzerfreundlichkeit : Wenn Sie etwas in einer größeren Umgebung verwenden möchten, möchten Sie sicherstellen, dass die Einrichtung unkompliziert ist und automatisiert werden kann. Nichts ist schlimmer, als auf einem halben Dutzend Maschinen einen finnicky Build aufbauen zu müssen.

Es gibt eine Menge Artikel über Leistung und Skalierbarkeit, aber im Allgemeinen werden Sie einen Leistungsunterschied von vielleicht 5-10x zwischen den Sprachen betrachten, der je nach Ihrer spezifischen Anwendung von Bedeutung sein kann oder nicht. Was die GPU-Beschleunigung angeht, cudamatist dies eine wirklich nahtlose Methode, um sie zum Laufen zu bringen python, und die cudaBibliothek hat die GPU-Beschleunigung im Allgemeinen weitaus zugänglicher gemacht als früher.

Die beiden wichtigsten Metriken, die ich sowohl für die Community als auch für die Flexibilität verwende, sind der Paketmanager der Sprache und die Sprachfragen auf einer Site wie SO. Wenn es eine große Anzahl hochwertiger Fragen und Antworten gibt, ist dies ein gutes Zeichen dafür, dass die Community aktiv ist. Die Anzahl der Pakete und die allgemeine Aktivität für diese Pakete können ebenfalls ein guter Proxy für diese Metrik sein.

In Bezug auf die Benutzerfreundlichkeit bin ich fest davon überzeugt, dass der einzige Weg, dies tatsächlich zu wissen, darin besteht, es selbst einzurichten. Es gibt viel Aberglauben um viele Data Science-Tools, insbesondere um Datenbanken und verteilte Computerarchitektur, aber es gibt keine Möglichkeit, wirklich zu wissen, ob etwas einfach oder schwer einzurichten und bereitzustellen ist, ohne es einfach selbst zu erstellen.

indico
quelle
Um diese Antwort zu ergänzen: in Bezug auf Skalierbarkeit Scalaund Goerwähnenswert.
Marc Claesen
Ich würde Klarheit und Kürze hinzufügen (in Bezug auf Syntax und Spracharchitektur, aber nicht nur). Die Fähigkeit, schnell und schmerzfrei zu schreiben und zu lesen, macht einen großen Unterschied (da die Zeit der Programmierer teurer ist als die Maschinenzeit).
Piotr Migdal
5

Die beste Sprache hängt davon ab, was Sie tun möchten. Erste Bemerkung: Beschränken Sie sich nicht auf eine Sprache. Eine neue Sprache zu lernen ist immer eine gute Sache, aber irgendwann müssen Sie sich entscheiden. Die von der Sprache selbst angebotenen Einrichtungen sind naheliegend, aber meiner Meinung nach sind die folgenden wichtiger:

  • verfügbare Bibliotheken : Müssen Sie alles von Grund auf neu implementieren oder können Sie vorhandene Inhalte wiederverwenden? Beachten Sie, dass diese Bibliotheken nicht in der von Ihnen in Betracht gezogenen Sprache vorliegen müssen, solange Sie eine einfache Schnittstelle herstellen können. Wenn Sie in einer Sprache ohne Bibliothekszugriff arbeiten, können Sie die Dinge nicht erledigen.
  • Anzahl der Experten : Wenn Sie externe Entwickler wünschen oder in einem Team arbeiten möchten, müssen Sie berücksichtigen, wie viele Personen die Sprache tatsächlich kennen. Als extremes Beispiel: Wenn Sie sich entscheiden, in Brainfuck zu arbeiten, weil es Ihnen gefällt, wissen Sie, dass Sie wahrscheinlich alleine arbeiten werden. Es gibt viele Umfragen, anhand derer die Popularität von Sprachen beurteilt werden kann, einschließlich der Anzahl der Fragen pro Sprache zu SO.
  • Toolchain : Haben Sie Zugriff auf gute Debugger, Profiler, Dokumentationstools und (wenn Sie sich dafür interessieren) IDEs?

Mir ist bewusst, dass die meisten meiner Punkte etablierte Sprachen bevorzugen. Dies ist aus der Perspektive, Dinge zu erledigen.

Ich persönlich glaube jedoch, dass es weitaus besser ist, eine niedrige und eine höhere Sprache zu beherrschen:

  • Low Level: C ++, C, Fortran, ... mit denen Sie bestimmte Profiling-Hotspots nur dann implementieren können, wenn Sie dies benötigen, da die Entwicklung in diesen Sprachen normalerweise langsamer ist (obwohl dies Gegenstand von Debatten ist). Diese Sprachen bleiben in Bezug auf die kritische Leistung der König des Hügels und werden wahrscheinlich noch lange an der Spitze bleiben.
  • High Level: Python, R, Clojure, ... um Dinge zusammenzukleben und nicht leistungskritische Dinge zu erledigen (Vorverarbeitung, Datenverarbeitung, ...). Ich finde das einfach deshalb wichtig, weil es viel einfacher ist, in diesen Sprachen schnell zu entwickeln und Prototypen zu erstellen.
Marc Claesen
quelle
4

Zuerst müssen Sie entscheiden, was Sie tun möchten, und dann nach dem richtigen Werkzeug für diese Aufgabe suchen.

Ein sehr allgemeiner Ansatz besteht darin, R für erste Versionen zu verwenden und zu überprüfen, ob Ihr Ansatz korrekt ist. Es fehlt ein wenig an Geschwindigkeit, hat aber sehr mächtige Befehle und Addon-Bibliotheken, mit denen Sie fast alles ausprobieren können: http://www.r-project.org/

Die zweite Idee ist, wenn Sie die Algorithmen hinter den Bibliotheken verstehen möchten, sollten Sie sich die numerischen Rezepte ansehen. Sie sind für verschiedene Sprachen verfügbar und können kostenlos zum Lernen verwendet werden. Wenn Sie sie in kommerziellen Produkten verwenden möchten, müssen Sie eine Lizenz erwerben: http://en.wikipedia.org/wiki/Numerical_Recipes

Die meiste Zeit wird die Leistung nicht das Problem sein, sondern das Finden der richtigen Algorithmen und Parameter für sie. Daher ist es wichtig, eine schnelle Skriptsprache anstelle eines Monsterprogramms zu haben, das zuerst 10 Minuten kompilieren muss, bevor zwei Zahlen berechnet und die ausgegeben werden Ergebnis.

Ein großes Plus bei der Verwendung von R ist, dass es über integrierte Funktionen oder Bibliotheken für fast alle Arten von Diagrammen verfügt, die Sie zur Visualisierung Ihrer Daten benötigen.

Wenn Sie dann eine funktionierende Version haben, ist es fast einfach, sie in eine andere Sprache zu portieren, die Sie für leistungsfähiger halten.

Armin
quelle