Dlaczego Python jest wykorzystywany do wysokowydajnych / naukowych obliczeń (ale Ruby nie jest)?

106

Oto cytat z przemówienia PyCon 2011 :

Przynajmniej w naszym sklepie (Argonne National Laboratory) mamy trzy zaakceptowane języki do obliczeń naukowych. W tej kolejności są to C / C ++, Fortran we wszystkich jego dialektach i Python. Zauważysz absolutny i całkowity brak Ruby, Perl, Java.

Było to w bardziej ogólnym kontekście obliczeń o wysokiej wydajności. To prawda, że ​​cytat pochodzi tylko z jednego sklepu, ale inne pytanie o języki dla HPC wymienia Python jako jeden do nauki (a nie Ruby).

Teraz rozumiem, że C / C ++ i Fortran są używane w tym obszarze problemów (i Perl / Java nie jest używany). Ale jestem zaskoczony, że byłaby zasadnicza różnica w użyciu Pythona i Ruby w HPC, biorąc pod uwagę, że są one dość podobne. (Uwaga - jestem fanem Pythona, ale nie mam nic przeciwko Ruby).

Czy jest jakiś konkretny powód, dla którego jeden język wystartował? Czy chodzi o dostępne biblioteki? Niektóre funkcje językowe? Społeczność? A może po prostu historyczna zaraźliwość i mogło pójść w drugą stronę?

cyklop
źródło
2
Sugerowałbym, że chociaż oba są dynamicznymi językami, Python i Ruby są zupełnie inne. Bardziej inny niż podobny.
Adam Crossland,
20
Nie wiem, to jest odpowiedź, ale - pamiętaj, że Python miał większą „przyczepność”, zanim Ruby wystartowała poza małą społecznością z Railsami (około 2005-2006). Google używało Pythona od dłuższego czasu, co podniosło jego profil (na początku 2000 roku). Składnia Pythona jest jasna i łatwa do nauczenia się i czytania (i pamiętaj, że było to w czasach, gdy Perl był naprawdę jedyną ważną opcją), więc myślę, że to naprawdę popchnęło ku temu obliczenia naukowe. Potem zapewne sam się wzmocnił, ponieważ ludzie stworzyli NumPy / SciPy, MatPlotLib i wiele innych naukowych pakietów komputerowych.
wkl,
4
Osoby zainteresowane tym pytaniem zainteresują mnie również na stronie wymiany stosów komputerów .
Mark Booth,
2
„liczy się czytelność”
jsbueno
1
Aby zaoferować pewną perspektywę chemii obliczeniowej, trywialne jest równoległe obliczenie z Pythonem, a także tanie. Być może oba są prawdziwe również w Ruby. Nie wiem
Jonathan Landrum

Odpowiedzi:

108

Rozwinę mój komentarz.

Myślę, że istnieje kilka czynników, które wpłynęły na użycie Pythona w informatyce naukowej, ale nie sądzę, aby były jakieś ostateczne historyczne punkty, w których można by powiedzieć: „Tak, to jest powód, dla którego Python jest używany nad Ruby / cokolwiek innego. „

Wczesna historia

Python i Ruby są mniej więcej w tym samym wieku - według Wikipedii Python został oficjalnie wydany po raz pierwszy w 1991 roku, a Ruby w 1995 roku.

Jednak Python zyskał na znaczeniu wcześniej niż Ruby, ponieważ Google już używał Pythona i szukał programistów Pythona na przełomie tysiącleci. Ponieważ nie jest tak, że mamy wyselekcjonowaną historię użycia języków programowania i ich wpływ na ludzi, którzy ich używają, teoretyzuję, że to wczesne przyjęcie Pythona przez Google było dużym czynnikiem motywującym dla osób, które chcą rozszerzyć działalność poza używanie Matlaba, C ++, Fortran, Stata, Mathematica itp.

Mianowicie chodzi mi o to, że Google używał Pythona w systemie, w którym miały tysiące maszyn (myśl równoległość i skalowanie) i stale przetwarzały wiele milionów punktów danych (ponownie, skalowanie).

Zbieg zdarzeń

Obliczenia naukowe kiedyś były wykonywane na specjalistycznych maszynach, takich jak SGI i Crays (pamiętasz je?), I oczywiście FORTRAN był (i nadal jest) szeroko stosowany ze względu na jego względną prostotę i dlatego, że można go łatwiej zoptymalizować.

W ciągu ostatniej dekady sprzęt towarowy (czyli rzeczy, na które możesz sobie pozwolić, nie będąc milionerami) przejął naukową i ogromną sferę komputerową. Spójrz na 500 najlepszych obecnie rankingów - wiele najlepszych superkomputerów na świecie zbudowanych jest ze zwykłego sprzętu Intel / AMD.

Python pojawił się w odpowiednim czasie, ponieważ Google ponownie promowało Pythona, a Google korzystał ze sprzętu towarowego i mieli tysiące maszyn.

Dodatkowo, jeśli zagłębisz się w stare artykuły naukowe, pojawiły się one około 2000 roku.

Wcześniejsze wsparcie

Oto artykuł napisany dla Astronomical Data Analysis Software and Systems , napisany w 2000 roku, sugerujący Pythona jako język dla obliczeń naukowych.

Artykuł zawiera cytat o Pythonie:

Python jest zinterpretowanym obiektowym językiem programowania, który zaczyna być przedmiotem dużej uwagi w aplikacjach naukowych (Python, 1999). Wynika to z faktu, że Python i ogólnie języki skryptowe stanowią kolejny logiczny krok dla wielu projektów naukowych (Dubois 1994). Po pierwsze, Python zapewnia interpretowany język programowania, który można postrzegać jako rozszerzenie prostych języków poleceń używanych już przez programy naukowe

Po drugie, Python można łatwo zintegrować z oprogramowaniem napisanym w innych językach. W rezultacie może służyć zarówno jako język kontrolny do sterowania istniejącymi programami, jak i język kleju do łączenia różnych systemów. Wreszcie, Python zapewnia dużą kolekcję modułów stron trzecich, ugruntowaną bazę użytkowników oraz różnorodną dokumentację w postaci książek i referencji online. Z tego powodu można go postrzegać jako wysoce dopracowaną i rozszerzoną wersję tego, co naukowcy często próbują osiągnąć, pisząc własnych interpretatorów poleceń.

Widać więc, że Python miał już trakcję z końca lat 90., ponieważ był funkcjonalnie podobny do istniejących wówczas systemów i ponieważ łatwo było zintegrować Pythona z takimi rzeczami jak C i istniejące programy. Opierając się na treści artykułu, Python był już w użyciu naukowym od czasu 1995-1996.

Różnica we wzroście popularności

Popularność Ruby eksplodowała wraz z rozwojem Ruby On Rails, który po raz pierwszy ukazał się w 2004 roku. Byłem na studiach, kiedy po raz pierwszy naprawdę usłyszałem gwar o Ruby, a było to około 2005-2006. django dla Pythona zostało wydane w tym samym czasie (lipiec 2005 według Wiki), ale społeczność Ruby wydawała się bardzo mocno skoncentrowana na promowaniu jego użycia w aplikacjach internetowych.

Z drugiej strony Python miał już biblioteki pasujące do obliczeń naukowych:

  • NumPy - NumPy oficjalnie zaczął działać w 2005 roku, ale dwie biblioteki, na których został zbudowany, zostały wydane wcześniej: Numeric (1995) i Numarray (2001?)

  • BioPython - biologiczna biblioteka komputerowa dla Pythona, pochodzi przynajmniej z 2001 roku

  • SAGE - Pakiet matematyczny z pierwszym publicznym wydaniem na początku 2005 roku

I wiele innych, choć nie znam wielu ich osi czasu (oprócz przeglądania stron pobierania), ale Python ma również SciPy (zbudowany na NumPy, wydany w 2006 roku), miał powiązania z R (język statystyk) w na początku XXI wieku dostał MatPlotLib, a także naprawdę potężne środowisko powłoki w ipython.

ipython został wydany po raz pierwszy na początku 2000 roku i ma wiele funkcji dodanych do niego, które sprawiają, że jest bardzo przyjemny w obliczeniach naukowych, takich jak zintegrowane wykresy matplotlib i możliwość zarządzania klastrami obliczeniowymi .

Z powyższego artykułu:

Warto również zwrócić uwagę na szereg innych naukowych projektów komputerowych związanych z Pythonem. Numeryczne rozszerzenie Pythona dodaje do Pythona szybką manipulację macierzą i matrycą (Dubois 1996), MMTK to oparty na Pythonie zestaw narzędzi do modelowania molekularnego (Hinsen 1999), projekt Biopython opracowuje oparte na Pythonie narzędzia do badań z zakresu nauk przyrodniczych (Biopython 1999), a Visualization Toolkit (VTK) to zaawansowany pakiet wizualizacji z powiązaniami Pythona (VTK, 1999). Ponadto trwające projekty w społeczności Python opracowują rozszerzenia do przetwarzania i drukowania obrazów. Na koniec praca przedstawiona w (Greenfield, 2000) opisuje wykorzystanie Pythona w projektach na STScI.

Dobra lista naukowych i numerycznych pakietów dla Pythona .


Wiele z tego wynika prawdopodobnie z wczesnej historii i względnej niejasności Ruby aż do 2000 roku, podczas gdy Python zyskał popularność dzięki ewangelizacji Google.

Więc jeśli oceniałeś języki skryptowe w latach 1995–2000, na co tak naprawdę patrzyłeś? Był Perl, który prawdopodobnie był na tyle inny pod względem składniowym, że ludzie nie chcieli go używać, a potem był Python, który miał jaśniejszą składnię i lepszą czytelność.

I tak, prawdopodobnie jest wiele samowzmocnienia - Python ma już wszystkie te wspaniałe, przydatne biblioteki do obliczeń naukowych, podczas gdy Ruby ma mniejszościowy głos opowiadający się za jego wykorzystaniem w nauce, a niektóre biblioteki wyrastają, jak SciRuby , ale Narzędzia Pythona dojrzewały w ciągu ostatniej dekady.

Społeczność Ruby wydaje się być o wiele bardziej zainteresowana dalszym rozwijaniem Rubiego jako języka internetowego, ponieważ tak naprawdę stał się dobrze znany, podczas gdy Python zaczął na innej ścieżce, a później stał się szeroko stosowany jako język internetowy.

wkl
źródło
8
Zapomniałem trochę o integracji c. W wielu przypadkach obliczenia naukowe są intensywne obliczeniowo, a umiejętność napisania rutynowej operacji tylko dla tego bitu jest ważną zaletą.
Spencer Rathbun,
1
@SpencerRathbun Artykuł, do którego nawiązałem, wspomina przy użyciu Pythona z SWIG do generowania opakowań i zezwalania Pythonowi na interakcję z kodem C / C ++. SWIG nie otrzymał oficjalnego wsparcia dla Rubiego do czasu wydania Ruby 1.6, który został wydany w 2004 roku. Więc Python już miał duży start w głowie, mając na myśli udostępnianie i narzędzia umożliwiające dopasowanie go do istniejących systemów. Prawdopodobnie największy sterownik nie musiał porzucić całego istniejącego, zoptymalizowanego kodu FORTRAN / C, który był w użyciu.
wkl,
3
W 1991 roku używaliśmy TCL do łączenia bibliotek numerycznych jako sposobu analizy danych bez konieczności pisania mas C / Fortran. Python pojawił się we właściwym czasie, aby zastąpić TCL. Łatwość połączenia z „C” (i F2C z fortranem) była wielka sprawa w porównaniu z PERL, interfejs TCL do „C” był bardzo łatwy
Martin Beckett
Preferencyjne procesy załączania wyjaśniają bardzo dużo o tym, jakie języki są używane. To Zipfian! Zobacz „PAP” Zipf Myatery wyjaśniono w nim o 12:50.
radarbob
37

Używałem Python intensywnie w aplikacjach inżynierskich i Ruby w aplikacjach internetowych.

Problem, który widzę w Ruby jako języku naukowym, polega na tym, że istnieje zbyt wiele opcji składni dla danej operacji.

Python został zaprojektowany z następującą przesłanką „Powinien być jeden - a najlepiej tylko jeden - oczywisty sposób na zrobienie tego”. To sprawia, że ​​O wiele łatwiej jest odczytać czyjś kod i określać jego przeznaczenie. Jest to kluczem do wzajemnych ocen inżynierii itp.

Lubię Ruby i jest świetny do niektórych zadań, ale mój kod Ruby może być składniowo zupełnie inny niż kod innego programisty, który robi dokładnie to samo. Powoduje to zbyt dużą dwuznaczność w środowisku naukowym lub inżynieryjnym.

Joshua Shreve
źródło
3
W rzeczy samej. Ruby ma tradycję TIMTOWTDI i dlatego jest tylko nieco lepszym Perlem. Oprogramowanie jest napisane dla programistów. Kompilatorzy / tłumacze są w tym sensie drugorzędnym odbiorcą. Naukowcy zwykle poważnie podchodzą do wykonywania swojej pracy bez zbytniej ingerencji w niepotrzebnie trudne oprogramowanie. QED
Dominic Cronin,
4
Nie jestem pewien, czy podążę za tym argumentem. Jeśli programista, a nie maszyna, jest główną publicznością, zdarza się, że sformułowanie rzeczy w inny sposób poprawia jasność i podkreśla intencję. Czy bardziej elastyczny język nie pomaga zrozumieć przez nasze miękkie ludzkie mózgi?
Andrew Vit,
10
Ale C może również wyglądać jak eksplozja w fabryce ASCII. Przypomnij sobie, że w C tablica jest skórką wokół wskaźników. Tak więc tablicę [5] można alternatywnie zapisać jako * (tablica + 5), którą alternatywnie można zapisać jako * (5 + tablica), którą alternatywnie można zapisać jako 5 [tablica]. Co jest głupie.
Jonathan Landrum
1
Jestem bardzo długoterminowym programistą perlowym i pozostaje moim ulubionym językiem do większości celów. Nie jestem pewien co do matematyki. Nie zgadzam się z tym podejściem do podejścia TIMTOWTDI. Posiadanie wielu dostępnych podejść nie oznacza, że ​​wszystkie są dobre, ale ważne jest, aby móc dostosować swój wyraz, tak aby wyraźnie i bezpośrednio odwzorował pomysł, który wyrażasz, zarówno dla ludzi, jak i odbiorców maszyn. Brak opcji składniowych nie pomaga.
mc0e
@AndrewVit: Niekoniecznie. TIMTOWTDI działa świetnie, jeśli masz jednego programistę lub mały, ściśle zintegrowany zespół programistów. Ale gdy tylko znajdziesz ludzi, którzy nigdy nie spotkali się, pracując nad tym samym kodem, zaczniesz zadawać sobie pytanie „Och, dlaczego mieliby to zrobić w ten sposób?” Możesz też napisać przewodnik po stylu, aby zmusić wszystkich do zrobienia tego w ten sam sposób, a wtedy nie będziesz już ćwiczyć TIMTOWTDI.
Kevin
17

Domyślam się, że duża część tego polegałaby na matlabie przez wielu badaczy. Python ma alternatywy, takie jak szałwia . Podczas gdy rubin nie, a przynajmniej nie ma oczywistych.

Po drugie, zgodnie z Ruby FAQ , python jest zarówno proceduralny, jak i obiektowy, podczas gdy ruby maskaruje się jako język proceduralny. Jeśli piszesz mały skrypt do celów matematycznych, takich jak to, co robisz w Matlabie, paradygmat OO to ból głowy. Co więcej, wymusza odejście koncepcyjne od paradygmatów funkcjonalnych / proceduralnych, których używają badacze. Matematyka to nie OO. Matematyka jest funkcjonalna, a następnie proceduralne (pomyśl dowody logiczne).

Na koniec zauważ, że Ruby FAQ mówi, że ruby ​​jest bardziej złożony niż Python. Programowanie zajmuje drugie miejsce wśród badaczy, a nie takich jak my.

Spencer Rathbun
źródło
22
Myślę, że OO to trochę czerwony śledź. Na czym zależy badaczowi, czy wyrażenie 1 + 1wysyła komunikat +do obiektu 1? To w żaden sposób nie zmienia struktury twojego programu.
sepp2k,
1
@ sepp2k, myślę, że Spencer sugeruje, że Ruby wymagałaby od naukowców programowania w inny sposób. Nie wiem, Ruby, ale zakładając was miał do tworzenia obiektów napisać program w Ruby, Python umożliwia natomiast procedur - to byłoby dodać do napowietrznej psychicznego. Nie było to wiele, ale dla nieprogramisty każda dodatkowa praca byłaby powodem do użycia innego języka.
Cyklop
7
@Cyclops Dostaję to, co on sugeruje. Mówię, że to źle. Cały sens cytatu o ruby ​​maskaradzie jako języku proceduralnym polega na tym, że nie musisz konstruować programu w sposób zorientowany obiektowo. Jeśli wpiszesz coś takiego jak „2 + 2”, tworzysz dwa obiekty całkowite i wywołujesz metodę na jednym (przekazując drugi jako argument). Jednak to nie powoduje, że wpisanie „2 + 2” w rubinie wymaga więcej wysiłku niż wpisanie „2 + 2” w innych językach.
sepp2k
5
Jestem z sepp2k, też nie kupuję tego argumentu. Niektóre języki, takie jak Java, wymuszają na tobie paradygmat OO - nie w przypadku Ruby. Co powstrzymuje cię przed pisaniem czysto proceduralnego lub funkcjonalnego programu w Ruby?
Mike Baranczak
2
@Cyclops dokładnie. Podczas gdy Ruby może udawać proceduralną, w nietrywialnym kontekście napotkasz sytuacje, w których paradygmat OO sprawia, że ​​język działa w określony sposób. Jeśli tego nie rozumiesz lub zignorujesz, albo nie jesteś w stanie zrobić tego, co chcesz, albo skończy się bałaganiarskim hackem.
Spencer Rathbun,
14

Kiedy BDFL (Guido van Rossum) po raz pierwszy napisał Python, celem było, aby był on tak zrozumiały jak zwykły angielski (propozycja finansowania DARPA), co wyeliminowałoby typowe błędy kodowania.

Jednym z najbardziej widocznych problemów jest użycie wcięcia do rozgraniczenia bloków. W językach, w których występują wyraźne ograniczniki instrukcji złożonych (np. Nawiasy klamrowe C, Pascal BEGIN / END), białe znaki zostaną zwinięte do pojedynczego znaku spacji przed przekazaniem kodu do leksera. Pozwoliłoby to na znaczne zróżnicowanie sposobu tworzenia kodu.

Dla profesjonalnych programistów nie stanowi to problemu, ponieważ wyszkolili się, jak sobie z tym radzić przez 30 lub więcej godzin tygodniowo ćwiczeń.

Dla innych profesjonalistów, dla których programowanie jest narzędziem, problem ten staje się poważnym problemem. Ta grupa obejmuje matematyków, fizyków, chemików, inżynierów itp.

Ponieważ Python redukuje błędy dla nieprofesjonalnych programistów, pozwala im zastanowić się nad problemem, który próbują rozwiązać, i nie musi zbytnio zajmować się mechaniką języka.

Jest to jeden z przykładów, dlaczego jest popularny poza zawodem programisty. Istnieją inne przykłady, które można wykorzystać do zilustrowania tego samego punktu, takie jak dołączone baterie, Zen of Python ( import this), użycie humoru Monty Python i tak dalej.

Lance Helsten
źródło
Nie mogę znaleźć żadnego odniesienia do pracy doktorskiej lub programu doktoranckiego na liście CV Guido lub publikacji. Czy masz na to powód? Ten wywiad mówi tylko, że był badaczem w CWI.
M. Dudley,
Całkowicie się z tym pogubiłem: czytałem, że zrobił o tym rozprawę, ale nie przeprowadził odpowiednich badań. Znalazłem błąd po napisaniu tego postu, ale nigdy nie wprowadziłem tutaj poprawki. Dzięki.
Lance Helsten
5

To świetna dyskusja tutaj, myślę, że posty tutaj naprawdę odpowiedziały, dlaczego python jest bardziej popularny w środowisku naukowym. Istnieją jednak kontrargumenty dla nauk ruby:

  • Ruby można kodować bardziej intuicyjnie niż Python (DSL itp.): biorąc pod uwagę odpowiednie użyte pakiety:

    sprawdź bioruby: http://bioruby.org/ rezerwa sekwencji może być po prostu: s.reverse itp., jeśli używasz baz danych: interfejs API wiązania bazy danych Ruby jest prawdopodobnie lepszy niż python.

  • ruby pozwala na wyższy poziom abstrakcji w tym samym czasie, gdy jest zwięzły.

  • lepszy system zarządzania pakietami: klejnoty rubinowe są łatwiejsze w porównaniu do: setuptools, pip itp

Jednak adopcja Ruby była / będzie / będzie utrudniona przez jego złożoność. Myślę, że Lisp jest świetnym / potężnym językiem, ale dlaczego nie wystartował jako język ogólny? podobna sytuacja ma miejsce w przypadku rubinu - dziedziczy on dużą moc po seplenienie, małej rozmowie i perlu !:, ale tylko niektóre osoby faktycznie skorzystają z niego, aby uzyskać korzyści. W końcu może pozostać silny w niektórych obszarach niszowych / specjalnych (takich jak szyna w sieci, marionetka w konfiguracji), trudno jest „nie” programistom w pełni się nim cieszyć, ale może być dobrym przyjacielem programisty (widział jakiś komputer naukowcy lubią język: http://www.cleveralgorithms.com/nature-inspired/index.html )

Niektóre najnowsze aktualizacje: wygląda na to, że Python już przejął krajobraz. Ostatnio książki takie jak: http://www.amazon.com/Python-Data-Analysis-Wes-McKinney/dp/1449319793 i wiele innych książek (analiza danych, uczenie maszynowe itp.), Wszystkie są napisane w języku python jako używanym języku . Jeśli rubin chce nadrobić zaległości, potrzebuje poważnych wysiłków. Biorąc pod uwagę matplotlib w pythonie, prawdopodobnie jest to kilka osobolat, aby doprowadzić go do stanu, w którym jest teraz. O ile nie zostaną podjęte poważne wysiłki w rubinie, prawdopodobnie nie nadąży on za etapem analizy danych Pythona / obliczeń naukowych w ciągu najbliższych 2-3 lat.

Isaac Pei
źródło
3

Po dłuższym użyciu Pythona do analizy danych (pochodzącej z doświadczeń związanych z Ruby, Lua i R) pakiet numpy (i wiele powiązanych bibliotek naukowych) umożliwia „szybkie” wykonywanie obliczeń (szybkość podobna do C, ponieważ numpy jest napisany / zintegrowany z kodami C) z łatwością programowania w Pythonie.

Numpy istnieje od jakiegoś czasu, jego dostępność pomogła w zbudowaniu wielu innych powiązanych pakietów naukowych, takich jak scipy, pandy ... itd. Istnieją świetne narzędzia, które sprawiają, że Python jest świetnym ekosystemem dla naukowego przetwarzania danych, podczas gdy w Rubim, podobna szybsza matryca właśnie opracowywana jest biblioteka obliczeń (NMtrix: https://github.com/SciRuby/nmatrix ). Ta ogromna różnica czasowa sprawia, że ​​python jest oczywistym wyborem do obliczeń naukowych.

Ipstone
źródło
5
„w końcu python jest jak język każdego”, musisz podać źródło, aby to zrobić.
Walter,
2

Zastanawiam się nad tym samym. Myślę, że tak, jak powiedział Spencer Rathbun, z powodu proceduralnego aspektu Pythona. Jako, że sam jestem „nie-programistą”, uważam, że sposób pisania kodu w Ruby jest piękny, a środowisko Rails jest doskonałe pod względem łatwości użycia. Jednak podczas kodowania do celów naukowych (matematyka, biologia itp.) Zwykle myślisz w języku „matematycznym”, to znaczy nie przejmujesz się stwierdzeniami takimi jak

Person.find_by_name 'Juanito'

ale zależy ci bardziej

A = B*C + D

Myślę więc, że Ruby jest potężny, ponieważ wiele jego funkcji nie byłoby używanych w programie naukowym. Łatwiej jest myśleć w procedurach.

juandiego
źródło
0

Python ma lepszą obsługę tablic N-wymiarowych dzięki pakietowi Numpy. Nie widziałem nic podobnego dla Ruby.

Python wydaje się być szybszy w obliczeniach numerycznych / naukowych, które zrobiłem. Nie mam żadnego dowodu poza tym, że kiedy napisałem podobne algorytmy w Pythonie i Ruby, algorytmy w Pythonie działały szybciej (YMMV).

Josh Petitt
źródło
2
To tak naprawdę niewiele wnosi do dyskusji. Skuteczność Numpy została już omówiona (bardziej szczegółowo) w zaakceptowanej odpowiedzi . Twój argument dotyczący wydajności pozostaje nieprzekonujący; Nie lubię polegać na anegdotach przy omawianiu wyników historycznych, zwłaszcza gdy takie argumenty są już prawdopodobnie dobrze ujęte w wiarygodne (cóż, bardziej godne zaufania niż anegdota bezkontekstowa) testy porównawcze.
Brian
@Brian, zgodził się.
Josh Petitt
@Brian, moim konkretnym wkładem był komentarz na temat tablic N-wymiarowych. To jest sedno tego, na czym zbudowano Numpy, tak, ale nie widziałem żadnej wzmianki o tablicach ND. Jest to rdzeń algebry liniowej i to, co Matlab i Numpy dobrze sobie radzą. Ruby używa tablic, tak jak programiści używają tablic, a nie inżynierowie, a naukowcy używają tablic (tj. Matrycy). Jeśli uważasz, że to pomoże, dodam komentarz do tablic ND do zaakceptowanej odpowiedzi.
Josh Petitt
@Brian i nadal podtrzymuję mój komentarz, że nie widziałem dobrego wsparcia dla Ruby dla Ny w obliczeniach naukowych.
Josh Petitt
0

Jednym z powodów jest to, że Python ma dobre wsparcie dla używania / integracji / wywoływania kodu C / C ++, podczas gdy według mojej wiedzy Ruby nie oferuje tego samego stopnia (łatwości) integracji. Oznacza to, że możesz napisać wysokowydajne komponenty kodu w C / C ++, a następnie użyć Pythona (tj. Języka wysokiego poziomu / łatwiejszego do zrozumienia), aby skleić całość. Wyobrażam sobie, że jest to również jeden z powodów jego wczesnego instytucjonalnego przyjęcia przez Google.

david.barkhuizen
źródło
0

Myślę, że jednym z głównych powodów, dla których Python stał się tak popularny w dziedzinie nauki o danych, był czas / wysiłek (tj. Pieniądze), które moglibyśmy zaoszczędzić, aby rozszerzyć nasze skrypty o prawdziwe rozwiązanie (np. System oprogramowania). Za pomocą Pythona możemy łatwiej zbudować rozwiązanie systemowe na podstawie kodu, który napisaliśmy dla nauki danych.

Mam doświadczenie w wyszukiwaniu języka tłumacza z tą funkcją około 15 lat temu. W tamtym czasie wybrano Python, nie dlatego, że jest to idealny język do analizy danych, ale dlatego, że był to rzadki język OOP z szybkim / przenośnym interpreterem, który można również rozszerzać na interfejsy z innymi językami, takimi jak C / C ++ / Jawa. W przeciwieństwie do dzisiejszych czasów były to świetne, ale rzadkie funkcje do bezpośredniego budowania rozwiązań z kodu bazowego już zaimplementowanego do analizy danych.

Czas może być kolejnym decydującym czynnikiem w tworzeniu języka danych. 15 lat temu odkryliśmy, że w Pythonie istnieją już podstawowe pakiety, takie jak numeryczne i scipy, do obliczeń numerycznych, ale nawet nie wiedzieliśmy o istnieniu Ruby jako języka programowania. Pod koniec 2018 r. Mogłem znaleźć kilka projektów wykorzystujących Ruby do analizy danych. Może 10 lat później można zapytać, dlaczego Ruby jest tak popularna wśród AI.

Tae-Sung Shin
źródło