Warum wird Python für High-Performance / Scientific Computing verwendet (Ruby jedoch nicht)?

106

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

Zumindest in unserem Geschäft (Argonne National Laboratory) haben wir drei anerkannte Sprachen für das wissenschaftliche Rechnen. In dieser Reihenfolge sind dies C / C ++, Fortran in allen Dialekten und Python. Sie werden den absoluten und totalen Mangel an Ruby, Perl, Java bemerken.

Es befand sich im allgemeineren Kontext des Hochleistungsrechnens. Zugegeben, das Angebot stammt nur aus einem Shop, aber eine andere Frage zu Sprachen für HPC führt Python auch als eine auf, die es zu lernen gilt (und nicht Ruby).

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

Gibt es einen bestimmten Grund, warum die eine Sprache abgehoben hat? Geht es um die verfügbaren Bibliotheken? Einige spezifische Sprachmerkmale? Die Gemeinde? Oder vielleicht nur ein historischer Zufall , und es hätte auch anders kommen können?

Zyklop
quelle
2
Ich würde vorschlagen, dass Python und Ruby, obwohl beide dynamische Sprachen sind, sehr unterschiedlich sind. Mehr anders als ähnlich.
Adam Crossland
20
Ich weiß nicht, dass dies eine Antwort ist, aber - denken Sie daran, dass Python mehr "Traktion" hatte, bevor Ruby vor einer kleinen Community mit Rails startete (circa 2005-2006). Google verwendet Python seit einiger Zeit, wodurch sich sein Bekanntheitsgrad erhöhte (Anfang der 2000er Jahre). Die Syntax von Python ist klar und einfach zu erlernen und zu lesen (und denken Sie daran, dass dies in der Zeit war, als Perl wirklich die einzige andere wichtige Option war). Danach war es wahrscheinlich eine Selbstverstärkung, als die Leute NumPy / SciPy, MatPlotLib und viele andere wissenschaftliche Computerpakete erstellten.
wkl
4
Leute, die sich für diese Frage interessieren, interessieren mich auch für das Auschecken der Stack-Exchange-Site von Computational Science .
Mark Booth
2
"Lesbarkeit zählt"
jsbueno
1
Um eine gewisse Computerchemie-Perspektive zu bieten, ist es trivial, eine Berechnung mit Python zu parallelisieren, und dies auch billig. Vielleicht trifft beides auch auf Ruby zu. Ich weiß es nicht.
Jonathan Landrum

Antworten:

108

Ich werde meinen Kommentar erweitern.

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

Frühe Geschichte

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

Python wurde jedoch früher bekannt als Ruby, da Google bereits um die Jahrtausendwende Python verwendete und nach Python-Entwicklern suchte. Da es nicht so ist, als hätten wir eine kuratierte Geschichte der Verwendung von Programmiersprachen und ihrer Einflüsse auf die Benutzer, die sie verwenden, und ich werde die These aufstellen, dass diese frühe Einführung von Python durch Google eine große Motivation für Menschen war, die über die reine Verwendung von Matlab, C ++ hinausgehen möchten. Fortran, Stata, Mathematica usw.

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

Ereigniskonflikt

Früher wurde wissenschaftliches Rechnen auf Spezialmaschinen wie SGIs und Crays durchgeführt (erinnerst du dich?), Und natürlich wurde (und wird) FORTRAN aufgrund seiner relativen Einfachheit und weil es einfacher zu optimieren war.

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

Python kam zu einem guten Zeitpunkt, da Google wieder Python bewarb und Google Standardhardware verwendete und sie Tausende von Maschinen besaßen.

Wenn Sie sich mit einigen alten Artikeln aus dem Bereich des wissenschaftlichen Rechnens befassen, tauchten sie in der Zeit um das Jahr 2000 auf.

Frühere Unterstützung

In diesem Artikel für Astronomical Data Analysis Software and Systems aus dem Jahr 2000 wird Python als Sprache für das wissenschaftliche Rechnen vorgeschlagen.

Der Artikel hat 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 für viele wissenschaftliche Projekte einen nächsten logischen Schritt 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 wurde. Dadurch kann es sowohl als Steuerungssprache für die Ansteuerung bestehender 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 ansehen, was Wissenschaftler oft versuchen, wenn sie ihre eigenen Befehlsinterpreter schreiben.

Sie können also sehen, dass Python bereits seit Ende der 90er Jahre bekannt ist, da es zu der Zeit funktionell mit den vorhandenen Systemen vergleichbar war und sich Python leicht in Dinge wie C und die vorhandenen Programme integrieren ließ. Basierend auf dem Inhalt des Artikels war Python bereits seit 1995-1996 im wissenschaftlichen Einsatz.

Unterschied im Beliebtheitswachstum

Rubys Popularität explodierte mit dem Aufstieg von Ruby On Rails, das erstmals im Jahr 2004 auf den Markt kam. Ich war auf dem College, als ich das erste Mal die Begeisterung für Ruby hörte, und das war zwischen 2005 und 2006. Django für Python wurde ungefähr im selben Zeitraum veröffentlicht (Juli 2005 laut Wiki), aber der Fokus der Ruby-Community schien sehr stark darauf gerichtet zu sein, seine Verwendung in Webanwendungen zu fördern.

Python hingegen verfügte bereits über Bibliotheken, die für das wissenschaftliche Rechnen geeignet waren:

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

  • BioPython - Biological Computing Library für Python, stammt mindestens aus dem Jahr 2001

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

Und viele mehr, obwohl ich nicht viele ihrer Zeitpläne kenne (abgesehen vom Durchsuchen ihrer Download-Sites), aber Python hat auch SciPy (auf NumPy aufgebaut, 2006 veröffentlicht), das Bindungen mit R (der Statistiksprache) in Anfang der 2000er Jahre bekam MatPlotLib und bekam auch eine sehr leistungsfähige Shell-Umgebung in ipython.

ipython wurde zum ersten Mal in den frühen 2000er Jahren veröffentlicht und verfügt über viele Funktionen, die es für das wissenschaftliche Rechnen sehr nützlich machen, wie beispielsweise die integrierte Matplotlib-Grafik und die Fähigkeit, Rechencluster zu verwalten .

Aus obigem Artikel:

Es lohnt sich auch, eine Reihe anderer wissenschaftlicher Python-Computerprojekte zu erwähnen. Die numerische Python-Erweiterung erweitert Python um eine schnelle Array- und Matrix-Manipulation (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 wird in der in (Greenfield, 2000) vorgestellten Arbeit die Verwendung von Python in Projekten am STScI beschrieben.

Gute Liste von wissenschaftlichen und numerischen Paketen 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.

Also, wenn Sie Skriptsprachen in der Zeit von 1995 bis 2000 evaluierten, was haben Sie wirklich gesehen? Es gab Perl, das wahrscheinlich syntaktisch so unterschiedlich war, dass die Leute es nicht verwenden wollten, und dann gab es Python, das eine klarere Syntax und bessere Lesbarkeit aufwies.

Und ja, es gibt wahrscheinlich eine Menge Selbstverstärkung - Python verfügt bereits über all diese großartigen, nützlichen Bibliotheken für das wissenschaftliche Rechnen, während Ruby über eine Minderheitsstimme verfügt, die für den Einsatz in der Wissenschaft plädiert , und es gibt einige Bibliotheken, die aufkeimen, wie SciRuby , aber Pythons Werkzeuge sind im letzten Jahrzehnt gereift.

Rubys Community im Allgemeinen scheint viel stärker an der Förderung von Ruby als Web-Sprache interessiert zu sein, da dies den Bekanntheitsgrad von Ruby erhöht hat, während Python einen anderen Weg eingeschlagen hat und später als Web-Sprache weit verbreitet wurde.

wkl
quelle
8
Ich hatte das bisschen über C-Integration vergessen. In vielen Fällen ist eine wissenschaftliche Berechnung rechenintensiv, und es ist ein wichtiger Vorteil, eine Routine für genau dieses Bit schreiben zu können.
Spencer Rathbun
1
@SpencerRathbun In dem Artikel, den ich verlinkt habe, wird erwähnt, dass Python mit SWIG verwendet wird, um Wrapper zu generieren und Python die Interoperabilität mit C / C ++ - Code zu ermöglichen. SWIG erhielt keinen offiziellen Ruby-Support bis zu Ruby 1.6, das 2004 veröffentlicht wurde. Python hatte also bereits einen großen Vorsprung, wenn man nur daran dachte, wie man Python in bestehende Systeme einbinden kann. Der wahrscheinlich größte Treiber bestand darin, nicht den gesamten vorhandenen, optimierten FORTRAN / C-Code fallen zu lassen, der verwendet wurde.
wkl
3
1991 verwendeten wir TCL, um numerische Bibliotheken zusammenzufügen, um Daten zu analysieren, ohne Massen von C / Fortran schreiben zu müssen. Python kam genau zum richtigen Zeitpunkt, um TCL zu ersetzen. Die einfache Schnittstelle mit 'C' (und mit F2C mit fortran) war die große Sache im Vergleich zu PERL, die TCL-Schnittstelle mit 'C' war sehr einfach
Martin Beckett
Bevorzugte Bindungsprozesse erklären sehr viel darüber, welche Sprachen verwendet werden. Es ist Zipfian! Siehe The Zipf Myatery "PAP" wird um 12:50 darin erklärt.
Radarbob
37

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

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

Python wurde mit der folgenden Prämisse entworfen: "Es sollte einen - und vorzugsweise nur einen - offensichtlichen Weg geben, dies zu tun." Dies macht es VIEL einfacher, jemanden Code zu lesen und seine Absicht zu bestimmen. Dies ist der Schlüssel für Peer Reviews für das 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 in einem wissenschaftlichen oder ingenieurwissenschaftlichen Umfeld zu vieldeutigen Ergebnissen.

Joshua Shreve
quelle
3
Ja, in der Tat. Ruby steht in der TIMTOWTDI-Tradition und ist daher nur ein wenig besseres Perl. Software ist für Programmierer geschrieben. Compiler / Interpreten sind in diesem Sinne ein sekundäres Publikum. Wissenschaftler neigen dazu, es ernst zu meinen, ihre Arbeit ohne zu viele Störungen durch unnötig schwierige Software zu erledigen. QED
Dominic Cronin
4
Ich bin mir nicht sicher, ob ich diesem Argument folge. Wenn der Programmierer und nicht eine Maschine das primäre Publikum ist, kann es vorkommen, dass die Formulierung der Dinge die Klarheit verbessert und die Absicht hervorhebt. Hilft eine flexiblere Sprache nicht beim Verständnis für unser weiches menschliches Gehirn?
Andrew Vit
10
Aber C kann auch in der ASCII-Fabrik wie eine Explosion aussehen. Denken Sie daran, dass ein Array in C eine Skin um Zeiger ist. So kann Array [5] alternativ als * (Array + 5) geschrieben werden, was alternativ als * (5 + Array) geschrieben werden kann, was alternativ als 5 [Array] geschrieben werden kann. Welches ist dumm.
Jonathan Landrum
1
Ich bin ein sehr langjähriger Perl-Programmierer und es bleibt für die meisten Zwecke meine Lieblingssprache. Ich bin mir jedoch nicht sicher, was die Mathematik betrifft. Ich würde dieser Einstellung zum TIMTOWTDI-Ansatz nicht zustimmen. Viele Ansätze zur Verfügung zu haben, bedeutet natürlich nicht, dass sie alle gut sind, aber es ist wichtig, dass Sie Ihren Ausdruck so anpassen können, dass er klar und direkt der Idee entspricht, die Sie ausdrücken, sowohl Ihrem menschlichen als auch Ihrem maschinellen Publikum. Fehlende syntaktische Optionen helfen da nicht weiter.
mc0e
@ AndrewVit: Nicht unbedingt. TIMTOWTDI funktioniert hervorragend, wenn Sie einen Entwickler haben oder wenn Sie ein kleines, eng integriertes Entwicklerteam haben. Aber sobald Sie Leute haben, die sich noch nie mit der Arbeit an demselben Code getroffen haben, werden Sie sich fragen: "Oh, warum sollten sie das so machen?" Alternativ schreiben Sie einen Styleguide, der alle dazu zwingt, es auf die gleiche Weise zu tun, und dann tun Sie TIMTOWTDI nicht mehr.
Kevin
17

Vermutlich ist ein großer Teil davon das Vertrauen vieler Forscher in matlab . Python bietet Alternativen wie Salbei . Während Ruby dies nicht tut, oder zumindest gibt es keine offensichtlichen.

Zweitens ist Python laut Ruby-FAQ sowohl prozedural als auch objektorientiert, wohingegen Ruby als prozedurale Sprache maskiert . Wenn Sie ein kleines Skript für mathematische Zwecke schreiben, wie Sie es in matlab tun würden, ist das OO-Paradigma Kopfschmerzen. Nicht nur das, sondern es zwingt einen konzeptuellen Sprung weg von den funktionalen / prozeduralen Paradigmen, die Forscher verwenden. Mathe ist nicht OO. Mathematik ist funktional, gefolgt von prozeduralen (Think Logic Proofs).

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

Spencer Rathbun
quelle
22
Ich denke, das OO-Ding ist ein bisschen wie ein roter Hering. Was kümmert es einen Forscher, ob der Ausdruck 1 + 1die Nachricht +an das Objekt sendet 1? Das ändert nichts an der Struktur Ihres Programms.
7.
1
@ sepp2k, ich denke, Spencer schlägt vor, dass Ruby von Wissenschaftlern verlangt, dass sie anders programmieren . Ich weiß nicht , Rubin, aber man angenommen hatte Objekte zu erstellen , ein Programm in Ruby zu schreiben, während Python Verfahren ermöglicht - dies den mentalen Aufwand hinzufügen würde. Zugegeben, nicht viel, aber für einen Nicht-Programmierer wäre jede zusätzliche Arbeit ein Grund, eine andere Sprache zu verwenden.
Cyclops
7
@ Cyclops Ich bekomme was er vorschlägt. Ich sage es ist falsch. Der springende Punkt des Zitats über Ruby Masquerading als prozedurale Sprache ist, dass Sie Ihr Programm nicht objektorientiert strukturieren müssen. Wenn Sie so etwas wie "2 + 2" eingeben, erstellen Sie zwei Integer-Objekte und rufen eine Methode für eines auf (wobei die andere als Argument übergeben wird). Das bedeutet jedoch nicht, dass die Eingabe von "2 + 2" in Ruby mehr Aufwand erfordert als die Eingabe von "2 + 2" in anderen Sprachen.
7.
5
Ich bin bei sepp2k, ich kaufe dieses Argument auch nicht. Einige Sprachen, wie Java, zwingen Ihnen das OO-Paradigma auf - nicht so bei Ruby. Was hindert Sie daran, ein rein prozedurales oder funktionales Programm in Ruby zu schreiben?
Mike Baranczak
2
@ Cyclops genau. Während Ruby vorgibt , prozedural zu sein, werden Sie in einem nicht trivialen Kontext auf Situationen stoßen, in denen das OO-Paradigma die Sprache auf eine bestimmte Weise funktionieren lässt. Wenn Sie das nicht verstehen oder ignorieren, können Sie entweder nicht tun, was Sie wollen, oder es kommt zu einem chaotischen Hack.
Spencer Rathbun
14

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

Ein Problem, das deutlich sichtbar ist, ist die Verwendung von Einzügen zur Begrenzung von Blöcken. In Sprachen mit explizit komplexen Anweisungsbegrenzern (z. B. C-Klammern, Pascal BEGIN / END) wird das Leerzeichen auf ein einzelnes Leerzeichen reduziert, bevor der Code in den Lexer eingegeben wird. Dies würde große Variationen in der Gestaltung des Codes ermöglichen.

Für professionelle Programmierer ist dies kein Problem, da sie sich darauf vorbereitet haben, mit 30 oder mehr Stunden pro Woche zu arbeiten.

Für andere Fachleute, bei denen das Programmieren 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 den Mechanismen der Sprache auseinandersetzen.

Dies ist nur ein Beispiel dafür, warum es außerhalb des Programmierberufs beliebt ist. Es gibt andere Beispiele, die zur Veranschaulichung desselben Punkts verwendet werden können, z. B. eingeschlossene Batterien, The Zen of Python ( import this), die Verwendung von Monty Python Humor und so weiter.

Lance Helsten
quelle
Ich kann in Guidos Lebenslauf oder Publikationsliste keinen Verweis auf eine Dissertation oder ein Promotionsprogramm finden. Hast du ein Zitat dafür? Dieses Interview sagt nur, dass er ein Forscher am CWI war.
M. Dudley
Ich habe das total durcheinander gebracht: Ich hatte gelesen, dass er eine Dissertation darüber gemacht hat, habe aber nicht die richtigen Nachforschungen angestellt. Ich habe meinen Fehler gefunden, nachdem ich diesen Beitrag geschrieben hatte, aber dann hier nie die Korrektur vorgenommen. Vielen Dank.
Lance Helsten
5

Dies ist eine großartige Diskussion hier. Ich denke, die Beiträge hier haben wirklich geantwortet, warum Python in der wissenschaftlichen Community beliebter ist. Es gibt jedoch einige Gegenargumente für die Rubinwissenschaften:

  • Ruby kann intuitiver als Python (DSL usw.) codiert werden: vorausgesetzt, die richtigen Pakete werden verwendet:

    check bioruby: http://bioruby.org/ eine sequenzreserve kann einfach sein: am umkehren etc. wenn du datenbanken verwendest: ruby ​​database binding API ist wohl besser als python.

  • rubin erlaubt eine höhere abstraktionsebene bei gleichzeitig knapper struktur.

  • Besseres Paketverwaltungssystem: Rubinsteine ​​sind einfacher als Setuptools, Pip usw

Die Übernahme von Ruby wurde / wird jedoch durch seine Komplexität behindert. Ich denke, Lisp ist eine großartige / mächtige Sprache, aber warum hat sie sich nicht als allgemeine Sprache durchgesetzt? Ähnlich verhält es sich hier mit Ruby - es erbt eine Menge Power von Lisp, Smalltalk 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 Web, der Marionette in der Konfiguration) stark bleiben, es ist für 'Nicht'-Programmierer schwierig, es in vollem Umfang zu genießen, aber es könnte der gute Freund des Programmierers sein (sah einen Computer) Wissenschaftler lieben die Sprache: http://www.cleveralgorithms.com/nature-inspired/index.html )

Jüngstes Update: Python scheint die Landschaft bereits zu übernehmen. Kürzlich wurden Bücher wie: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 und viele andere Bücher (Datenanalyse, maschinelles Lernen usw.) mit Python als Sprache geschrieben . Wenn Ruby aufholen will, braucht es einige ernsthafte Anstrengungen. In Anbetracht der Matplotlib in Python dauert es wahrscheinlich mehrere Mannjahre, bis der Zustand erreicht ist, in dem er sich jetzt befindet. Ohne ernsthafte Anstrengungen, die in Ruby unternommen werden, kann es wahrscheinlich nicht mit dem Stand der Python-Datenanalyse / wissenschaftlichen Berechnung in den nächsten 2-3 Jahren mithalten.

Isaac Pei
quelle
3

Nachdem Sie Python für eine Weile für die Datenanalyse verwendet haben (aufgrund von Erfahrungen mit Ruby, Lua und R), können Sie mit dem Numpy-Paket (und vielen verwandten wissenschaftlichen Bibliotheken) eine schnelle Berechnung durchführen (Geschwindigkeit ähnlich C, wie Numpy) wird mit C-Codes geschrieben / integriert) mit der Leichtigkeit der Programmierung in Python.

Numpy gibt es schon seit einiger Zeit. Aufgrund seiner Verfügbarkeit konnten viele andere verwandte wissenschaftliche Pakete erstellt werden, z. B. Scipy, Pandas usw. Mit diesen großartigen Tools ist Python ein großartiges Ökosystem für das wissenschaftliche Rechnen, wohingegen Ruby eine ähnlich schnellere Matrix ist Die Berechnungsbibliothek wird gerade entwickelt (NMtrix: https://github.com/SciRuby/nmatrix ). Dieser enorme Zeitunterschied macht Python zur offensichtlichen Wahl für das wissenschaftliche Rechnen.

Ipstone
quelle
5
"Am Ende ist Python wie die Sprache aller", müssen Sie eine Quelle bereitstellen, um dies zu sichern.
Walter
2

Ich habe mich das gleiche gefragt. Ich denke, es liegt, wie Spencer Rathbun sagte, am prozeduralen Aspekt von Python. Als "Nicht-Programmierer" finde ich es sehr schön, wie Sie in Ruby programmieren können, und das Rails-Framework ist einfach zu bedienen. Wenn Sie jedoch 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

Ich denke also, Ruby ist mächtig, dass viele seiner Funktionen in einem wissenschaftlichen Programm ungenutzt wären. Es ist einfacher, nur in Abläufen zu denken.

juandiego
quelle
0

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

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

Josh Petitt
quelle
2
Dies trägt nicht wirklich viel zur Diskussion bei. Die Wirksamkeit von Numpy wird bereits in der akzeptierten Antwort (ausführlicher) behandelt . Ihr Leistungsargument bleibt nicht überzeugend; Ich verlasse mich nicht gerne auf Anekdoten, wenn ich über historische Leistungen diskutiere, besonders wenn solche Argumente wahrscheinlich bereits mit vertrauenswürdigen Benchmarks belegt sind.
Brian
@ Brian, einverstanden.
Josh Petitt
@ Brian, mein spezieller Beitrag war der Kommentar zu N-dimensionalen Arrays. Dies ist der Kern dessen, worum es bei Numpy geht, aber ich habe keine Erwähnung von ND-Arrays gesehen. Dies ist der Kern der linearen Algebra und das, was Matlab und Numpy gut können. Ruby verwendet Arrays wie Programmierer Arrays, nicht wie Ingenieure und Wissenschaftler Arrays (dh Matrizen). Wenn Sie der Meinung sind, dass dies helfen würde, werde ich der akzeptierten Antwort einen Kommentar zu ND-Arrays hinzufügen.
Josh Petitt
@Brian, und ich stehe immer noch zu meinem Kommentar, dass ich keine gute ND-Array-Unterstützung für Ruby für das wissenschaftliche Rechnen gesehen habe.
Josh Petitt
0

Ein Grund dafür ist, dass Python die Verwendung / Integration / Aufrufen von C / C ++ - Code gut unterstützt, wohingegen Ruby meines Wissens nicht den gleichen Grad an (einfacher) Integration bietet. Dies bedeutet, dass Sie die leistungsstarken Codekomponenten in C / C ++ schreiben und dann Python (dh eine Sprache auf hoher Ebene, die die Augen leichter macht) verwenden können, um das Ganze zusammenzufügen. Ich stelle mir vor, dass dies auch einer der Gründe für die baldige institutionelle Übernahme durch Google ist.

david.barkhuizen
quelle
0

Ich denke, einer der Hauptgründe, warum Python in der Datenwissenschaft so populär wurde, war der Zeit- / Arbeitsaufwand (dh das Geld), den wir einsparen konnten, um unsere Skripte für echte Lösungen (z. B. Softwaresysteme) zu erweitern. Mit Python könnten wir einfacher eine Systemlösung auf der Basis des Codes erstellen, 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. Zu dieser Zeit wurde Python als diejenige Sprache ausgewählt, nicht weil es die perfekte Sprache für die Datenwissenschaft ist, sondern weil es eine seltene OOP-Sprache mit schnellem / portablem Interpreter ist, die auch für die Schnittstelle mit anderen Sprachen wie C / C ++ / erweiterbar ist. Java. Anders als heutzutage waren dies großartige, aber seltene Funktionen zum direkten Erstellen von Lösungen aus dem für Data Science bereits implementierten Basiscode.

Die Zeit könnte ein weiterer kritischer Faktor für die Erstellung einer datenwissenschaftlichen Sprache sein. Vor 15 Jahren fanden wir heraus, dass es in Python bereits Basispakete wie Numeric und Scipy für numerische Berechnungen gab, aber wir wussten nicht einmal, dass Ruby eine Programmiersprache ist. Ab Ende 2018 konnte ich mehrere Projekte mit Ruby für Data Science finden. Vielleicht fragt man sich 10 Jahre später, warum Ruby für AI so beliebt ist.

Tae-Sung Shin
quelle