it-swarm.com.de

Warum wird Python für hochleistungsfähiges / wissenschaftliches Computing verwendet (aber Ruby nicht))?

Es gibt ein Zitat aus einem PyCon 2011-Vortrag , das lautet:

Zumindest in unserem Geschäft (Argonne National Laboratory) haben wir drei akzeptierte Sprachen für das wissenschaftliche Rechnen. In dieser Reihenfolge sind dies C/C++, Fortran in all seinen Dialekten und Python. Sie werden feststellen, dass Ruby, Perl und Java absolut und vollständig fehlen.

Es war im allgemeineren Kontext des Hochleistungsrechnens. Zugegeben, das Zitat stammt nur aus einem Shop, aber aus einem anderen Frage zu Sprachen für HPC , listet auch Python als einen zu lernenden (und nicht Ruby) auf.

Jetzt kann ich verstehen, dass C/C++ und Fortran in diesem Problemraum verwendet werden (und Perl/Java nicht verwendet wird). Aber ich bin überrascht, dass es einen großen Unterschied bei der Verwendung von Python und Ruby für HPC) geben würde, da sie ziemlich ähnlich sind. (Hinweis - I ' Ich bin ein Fan von Python, habe aber nichts gegen Ruby).

Gibt es einen spezifischen Grund, warum die eine Sprache abgehoben hat? Geht es um die verfügbaren Bibliotheken? Einige spezifische Sprachfunktionen? Die Gemeinde? Oder vielleicht nur historische Kontingenz , und es hätte auch in die andere Richtung gehen können?

107
Cyclops

Ich werde meinen Kommentar erweitern.

Ich denke, es gibt einige Faktoren, die die Verwendung von Python im wissenschaftlichen Rechnen beeinflusst haben, obwohl ich glaube, dass es keine endgültigen historischen Punkte gibt, an denen man sagen könnte: "Ja, das ist der Grund, warum Python wird über Ruby/irgendetwas anderem verwendet "

Frühe Geschichte

Python und Ruby sind ungefähr gleich alt - laut Wikipedia wurde Python 1991 erstmals offiziell veröffentlicht und Ruby 1995.

Python wurde jedoch früher bekannt als Ruby, da Google bereits Python verwendete und zum Zeitpunkt der Wende nach Python Entwicklern suchte das Jahrtausend. Da es nicht so ist, als hätten wir eine kuratierte Geschichte der Verwendung von Programmiersprachen und ihrer Einflüsse auf Menschen, die sie verwenden, werde ich theoretisieren, dass diese frühe Übernahme von Python durch Google ein großer Motivator für Menschen war, die darüber hinaus expandieren möchten nur mit Matlab, C++, Fortran, Stata, Mathematica usw.

Ich meine nämlich, dass Google Python in einem System verwendet hat, in dem Tausende von Maschinen vorhanden waren (denken Sie an Parallelisierung und Skalierung) und ständig viele Millionen Datenpunkte verarbeitet haben (wiederum Skalierung).

Ereigniskonfluenz

Früher wurde wissenschaftliches Rechnen auf Spezialmaschinen wie SGIs und Crays durchgeführt (erinnern Sie sich an sie?), Und natürlich wurde (und wird) FORTRAN aufgrund seiner relativen Einfachheit und weil es einfacher optimiert werden konnte, weit verbreitet.

In den letzten zehn Jahren hat die Standardhardware (dh Dinge, die Sie oder ich uns leisten können, ohne Millionäre zu sein) den wissenschaftlichen und massiven Computerbereich übernommen. Schauen Sie sich die aktuelle Top 500-Rangliste an - viele der besten Supercomputer der Welt sind mit normaler Intel/AMD-Hardware ausgestattet.

Python kam zu einem guten Zeitpunkt, da Google erneut für Python wirbt und Google Standardhardware verwendet und Tausende von Maschinen hat.

Wenn Sie sich mit einigen alten Artikeln über wissenschaftliche Computer beschäftigen, entstanden sie um das Jahr 2000 herum.

Frühere Unterstützung

Hier ist ein Artikel geschrieben für die Astronomical Data Analysis Software and Systems , geschrieben im Jahr 2000, der Python als Sprache für wissenschaftliches Rechnen vorschlägt.

Der Artikel enthält dieses Zitat über Python:

Python ist eine interpretierte objektorientierte Programmiersprache, die in wissenschaftlichen Anwendungen zunehmend Beachtung findet (Python, 1999). Dies liegt daran, dass Python und Skriptsprachen im Allgemeinen einen nächsten logischen Schritt für viele wissenschaftliche Projekte darstellen (Dubois 1994). Erstens bietet Python eine interpretierte Programmiersprache, die als Erweiterung der einfachen Befehlssprachen angesehen werden kann, die bereits von wissenschaftlichen Programmen verwendet werden

Zweitens lässt sich Python problemlos in Software integrieren, die in anderen Sprachen geschrieben ist. Infolgedessen kann es sowohl als Steuerungssprache für die Steuerung vorhandener Programme als auch als Klebesprache für die Kombination verschiedener Systeme dienen. Schließlich bietet Python eine große Sammlung von Modulen von Drittanbietern, eine etablierte Benutzerbasis und eine Vielzahl von Dokumentationen in Form von Büchern und Online-Referenzen. Aus diesem Grund könnte man es als eine hochglanzpolierte und erweiterte Version dessen betrachten, was Wissenschaftler oft versuchen, wenn sie ihre eigenen Befehlsdolmetscher schreiben.

Sie können also sehen, dass Python bereits seit Ende der 90er Jahre eine Traktion hatte, da es den zu diesem Zeitpunkt vorhandenen Systemen funktional ähnlich war und Pythonleicht zu integrieren war. _ mit Dingen wie C und den vorhandenen Programmen. Basierend auf dem Inhalt des Artikels war Python bereits in wissenschaftlicher Verwendung und ging auf den Zeitraum 1995-1996 zurück.

Unterschied im Beliebtheitswachstum

Rubys Popularität explodierte zusammen mit dem Aufstieg von Ruby on Rails, der 2004 herauskam. Ich war auf dem College, als ich das erste Mal wirklich die Begeisterung für Ruby hörte, und das war zwischen 2005 und 2006. Django für Python wurde ungefähr im gleichen Zeitraum (Juli 2005 laut Wiki) veröffentlicht, aber der Fokus der Ruby Community schien sehr stark auf die Förderung ihrer Community konzentriert zu sein Verwendung in Webanwendungen.

Python hingegen hatte bereits Bibliotheken, die zum wissenschaftlichen Rechnen passen:

  • NumPy - NumPy wurde 2005 offiziell gestartet, aber die beiden Bibliotheken, auf denen es aufgebaut war, wurden früher veröffentlicht: Numeric (1995) und Numarray (2001?)

  • BioPython - Biologische Computerbibliothek für Python, mindestens aus dem Jahr 2001

  • SAGE - Math-Paket mit der ersten öffentlichen Veröffentlichung Anfang 2005

Und viele mehr, obwohl ich nicht viele ihrer Zeitpläne kenne (abgesehen davon, dass sie nur ihre Download-Sites durchsuchen), aber Python hat auch SciPy (basierend auf NumPy, veröffentlicht im Jahr 2006), hatte Bindungen mit R. (die Statistiksprache) in den frühen 2000er Jahren bekam MatPlotLib und bekam auch eine wirklich leistungsfähige Shell-Umgebung in Ipython.

ipython wurde zum ersten Mal in den frühen 2000er Jahren veröffentlicht und hat viele Funktionen hinzugefügt, die es für wissenschaftliches Rechnen sehr nützlich machen, wie integrierte Matplotlib-Grafik und in der Lage, Computercluster zu verwalten =.

Aus dem obigen Artikel:

Es ist auch erwähnenswert, eine Reihe anderer Python verwandter wissenschaftlicher Computerprojekte. Die numerische Erweiterung Python erweitert Python um schnelle Array- und Matrixmanipulation (Dubois 1996). MMTK ist ein Python-basiertes Toolkit für die molekulare Modellierung (Hinsen 1999). Das Biopython-Projekt entwickelt Python- basierte Tools für die Life-Science-Forschung (Biopython 1999) und das Visualization Toolkit (VTK) ist ein erweitertes Visualisierungspaket mit Python -Bindungen (VTK, 1999). Darüber hinaus entwickeln laufende Projekte in der Python Community Erweiterungen für die Bildverarbeitung und das Plotten. Schließlich beschreibt die in (Greenfield, 2000) vorgestellte Arbeit die Verwendung von Python in Projekten am STScI.

Gut Liste der wissenschaftlichen und numerischen Pakete für Python .


Ein Großteil davon ist wahrscheinlich auf die frühe Geschichte und die relative Dunkelheit von Ruby bis in die 2000er Jahre zurückzuführen, während Python dank Googles Evangelisation an Bedeutung gewonnen hatte.

Wenn Sie also im Zeitraum von 1995 bis 2000 Skriptsprachen evaluierten, was haben Sie sich dann wirklich angesehen? Es gab Perl, das syntaktisch wahrscheinlich so unterschiedlich war, dass die Leute es nicht verwenden wollten, und dann gab es Python, das eine klarere Syntax und eine bessere Lesbarkeit hatte.

Und ja, es gibt wahrscheinlich eine Menge Selbstverstärkung - Python hat bereits all diese großartigen, nützlichen Bibliotheken für das wissenschaftliche Rechnen, während Ruby eine Minderheitsstimme hat, die seine Verwendung in der Wissenschaft befürwortet, und es entstehen einige Bibliotheken wie SciRuby , aber Pythons Tools sind im letzten Jahrzehnt gereift.

Rubys Community im Allgemeinen scheint viel stärker daran interessiert zu sein, Ruby als Web-Sprache zu fördern, da dies sie wirklich bekannt gemacht hat, während Python auf einem anderen Weg begann und später wurde weit verbreitet als Web-Sprache verwendet.

108
wkl

Ich habe Python ausgiebig für technische Anwendungen und Ruby für Webanwendungen) verwendet.

Das Problem, das ich mit Ruby als wissenschaftliche Sprache sehe, ist, dass es für eine bestimmte Operation zu viele Syntaxoptionen gibt.

Python basiert auf der folgenden Prämisse: "Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun." Dies macht es VIEL einfacher, jemandes Code zu lesen und seine Absicht zu bestimmen. Dies ist der Schlüssel für Peer Reviews für Engineering usw.

Ich mag Ruby und es ist großartig für bestimmte Aufgaben, aber mein Ruby Code könnte syntaktisch völlig anders sein als der Code eines anderen Programmierers, der genau dasselbe tut. Dies führt zu einer zu großen Mehrdeutigkeit in einer wissenschaftlichen oder technischen Umgebung.

37
Joshua Shreve

Vermutlich wäre ein großer Teil davon das Vertrauen vieler Forscher in matlab . Python hat Alternativen wie sage . Während Ruby nicht oder zumindest gibt es keine offensichtlichen.

Zweitens ist laut Ruby FAQ python ist sowohl prozedural als auch objektorientiert, während Ruby Maskeraden als prozedurale Sprache. Wenn Sie ein kleines Skript für mathematische Zwecke schreiben, wie Sie es in Matlab tun würden, ist das Paradigma OO ein Kopfschmerz. Nicht nur das, sondern auch das erzwingt einen konzeptuellen Sprung weg von den funktionalen/prozeduralen Paradigmen, die Forscher verwenden. Math ist nicht OO. Math ist funktional, gefolgt von prozeduralen (Think Logic Proofs).

Beachten Sie schließlich, dass Ruby FAQ besagt, dass Ruby ist komplexer als Python). Die Programmierung steht den Forschern an zweiter Stelle, nicht zuerst wie wir.

17
Spencer Rathbun

Als die BDFL (Guido van Rossum) zum ersten Mal Python) schrieb, war das Ziel, dass es so verständlich ist wie einfaches Englisch (DARPA-Finanzierungsvorschlag), wodurch häufige Codierungsfehler beseitigt werden.

Ein Problem, das sehr gut sichtbar ist, ist die Verwendung von Einrückungen zum Abgrenzen von Blöcken. In Sprachen mit expliziten komplexen Anweisungsbegrenzern (z. B. C-Klammern, Pascal BEGIN/END) wird das Leerzeichen auf ein einzelnes Leerzeichen reduziert, bevor der Code dem Lexer zugeführt wird. Dies würde große Unterschiede in der Anordnung des Codes ermöglichen.

Für professionelle Programmierer ist dies kein Problem, da sie sich darauf trainiert haben, ab 30 oder mehr Stunden pro Woche damit umzugehen.

Für andere Fachleute, bei denen die Programmierung ein Werkzeug ist, wird dieses Problem zu einem Hauptproblem. Diese Gruppe umfasst Mathematiker, Physiker, Chemiker, Ingenieure usw.

Da Python Fehler für nicht professionelle Programmierer reduziert), können sie über das Problem nachdenken, das sie zu lösen versuchen, und müssen sich nicht so sehr mit der Mechanik der Sprache befassen.

Dies ist ein einziges Beispiel dafür, warum es außerhalb des Programmierberufs beliebt ist. Es gibt andere Beispiele, die verwendet werden können, um den gleichen Punkt zu veranschaulichen, z. B. die enthaltenen Batterien, Das Zen von Python (import this), Die Verwendung von Monty Python Humor und so weiter.

14
Lance Helsten

Dies ist eine großartige Diskussion hier. Ich denke, die Beiträge hier haben wirklich beantwortet, warum python in der wissenschaftlichen Gemeinschaft populärer ist. Es gibt jedoch einige Gegenargumente für Ruby Wissenschaften:

  • Ruby kann intuitiver codiert werden als python (DSL usw.): mit den richtigen verwendeten Paketen:

    check bioruby: http://bioruby.org/ Eine Sequenzreserve kann einfach sein: s.reverse usw. Wenn Sie Datenbanken verwenden: Die Datenbankbindungs-API Ruby ist wohl besser als Python.

  • Ruby ermöglicht ein höheres Maß an Abstraktionen bei gleichzeitiger Knappheit.

  • besseres Paketverwaltungssystem: Ruby Edelsteine ​​sind so einfacher im Vergleich zu: Setuptools, Pip usw.

Die Annahme von Ruby wurde/wird/wird jedoch durch seine Komplexität behindert. Ich denke, LISP ist eine großartige/mächtige Sprache, aber warum hat es sich nicht als allgemeine Sprache durchgesetzt? Die ähnliche Situation ist hier bei Ruby - es erbt viel Kraft von LISP, Small Talk und Perl!: aber nur eine Auswahl von Leuten wird es tatsächlich nutzen, um die Vorteile zu nutzen. Am Ende mag es in bestimmten Nischen-/Spezialbereichen (wie der Schiene im Netz, Marionette in der Konfiguration) stark bleiben, es ist für Nicht-Programmierer schwierig, es vollständig zu genießen, aber es könnte der gute Freund des Programmierers sein (sah einen Computer Wissenschaftler genießen die Sprache: http://www.cleveralgorithms.com/nature-inspired/index.html )

Einige neueste Updates: Es scheint, dass python bereits die Landschaft übernimmt. Kürzlich wurden Bücher wie: http://www.Amazon.com/Python-Data-Analysis-Wes-McKinney/dp/144931979 und viele andere Bücher (Datenanalyse, maschinelles Lernen usw.) veröffentlicht geschrieben mit python als verwendete Sprache. Wenn Ruby aufholen will, braucht es einige ernsthafte Anstrengungen. In Anbetracht von Matplotlib in Python ist es wahrscheinlich mehrere Mannjahre, um es in den Zustand zu bringen, in dem es jetzt ist. Wenn Ruby keine ernsthaften Anstrengungen unternimmt, kann es wahrscheinlich nicht mit dem Stadium der python Datenanalyse/wissenschaftlichen Berechnung in den nächsten 2-3 Jahren Schritt halten.

5
Isaac Pei

Nach einer Weile der Verwendung von python für die Datenanalyse (aufgrund von Erfahrungen mit Ruby, lua und R)) ermöglicht das numpy-Paket (und viele verwandte wissenschaftliche Bibliotheken) eine schnelle Ausführung Berechnung (Geschwindigkeit ähnlich wie C, da Numpy in C-Codes geschrieben/integriert ist) mit der einfachen Programmierung in Python.

Numpy existiert schon seit einiger Zeit, die Verfügbarkeit hat dazu beigetragen, dass viele andere verwandte wissenschaftliche Pakete erstellt wurden, wie z. B. scipy, pandas ... usw.). Dort machen großartige Tools python ein großartiges Ökosystem für wissenschaftliches Rechnen, während in Ruby gerade eine ähnlich schnellere Matrixberechnungsbibliothek entwickelt wird (NMtrix: https://github.com/SciRuby/nmatrix ). Dieses enorme Timing Unterschied machen python die offensichtliche Wahl für wissenschaftliches Rechnen.

3
Ipstone

Ich habe mich das gleiche gefragt. Ich denke, es liegt, wie Spencer Rathbun sagte, am prozeduralen Aspekt von Python. Da ich selbst ein "Nicht-Programmierer" bin, finde ich es schön, wie Sie in Ruby und das Rails Framework) codieren können, um die Verwendung zu vereinfachen Wenn Sie für wissenschaftliche Zwecke (Mathematik, Biologie usw.) codieren, denken Sie normalerweise in einer "mathematischen" Sprache, das heißt, Sie interessieren sich nicht für Aussagen wie

Person.find_by_name 'Juanito'

aber du interessierst dich mehr für

A = B*C + D

Daher denke ich, dass Ruby mächtig ist, dass viele seiner Funktionen in einem wissenschaftlichen Programm nicht verwendet werden. Es ist einfacher, nur in Verfahren zu denken.

2
juandiego

Ich denke, einer der Hauptgründe Python wurde für die Datenwissenschaft so beliebt, war der Zeit-/Arbeitsaufwand (dh das Geld), den wir sparen konnten, um unsere Skripte für eine echte Lösung zu erweitern (z (Softwaresystem). Mit Python könnten wir einfacher eine Systemlösung erstellen, die auf dem Code basiert, den wir für Data Science geschrieben haben.

Ich habe vor ungefähr 15 Jahren Erfahrungen mit der Suche nach einer Dolmetschersprache mit dieser Funktion gemacht. Zu dieser Zeit wurde Python als diejenige gewählt, nicht weil es die perfekte Sprache für die Datenwissenschaft ist, sondern weil es eine seltene Sprache war OOP mit schnell/Portable Interpreter, der auch für die Schnittstelle mit anderen Sprachen wie C/C++/Java erweiterbar war. Im Gegensatz zu heute waren dies großartige, aber seltene Funktionen zum direkten Erstellen von Lösungen aus dem bereits für Data Science implementierten Basiscode.

Zeit könnte ein weiterer kritischer Faktor für die Erstellung einer datenwissenschaftlichen Sprache sein. Vor 15 Jahren stellten wir fest, dass es in Python bereits Basispakete wie numerisch und scipy für die numerische Berechnung gab, aber wir wussten nicht einmal, dass Ruby als Programmiersprache) existiert. Ab Ende 2018 Ich konnte mehrere Projekte mit Ruby für Data Science. Vielleicht 10 Jahre später könnte man sich fragen, warum Ruby ist für AI so beliebt.

0
Tae-Sung Shin

Ein Grund dafür ist, dass Python eine gute Unterstützung für die Verwendung/Integration/den Aufruf von C/C++ - Code bietet, während meines Wissens Ruby nicht den gleichen Grad an () bietet Einfache Integration. Dies bedeutet, dass Sie die leistungsstarken Codekomponenten in C/C++ schreiben und dann Python (dh eine Sprache auf hoher Ebene/für die Augen einfacher) verwenden können Ich stelle mir vor, dass dies auch einer der Gründe für die frühzeitige institutionelle Übernahme durch Google ist.

0

Python bietet mit dem Numpy-Paket eine bessere Unterstützung für N-dimensionale Arrays. Ich habe nichts Ähnliches für Ruby gesehen.

Python scheint im numerischen Rechnen/wissenschaftlichen Rechnen, das ich gemacht habe, schneller zu sein. Ich habe keinen anderen Beweis als wenn ich ähnliche Algorithmen in Python und Ruby, die Python Algorithmen liefen schneller (YMMV)) geschrieben habe.

0
Josh Petitt