Miękkie pytanie: gdzie mieści się Python na zdjęciu?

9

Zastanawiam się więc, czy powinienem zawracać sobie głowę nauką języka Python. Po rozmowie z moimi profesorami Matlab wydaje się być wspólnym językiem stosowanym w matematyce stosowanej / naukach komputerowych w odniesieniu do środowiska akademickiego ; podczas gdy w przemyśle moi profesorowie (szczególnie ci, którzy pracowali w przemyśle) powiedzieli, że nauka c ++ jest najbezpieczniejszą drogą.

Chciałbym usłyszeć od was, zarówno ze środowisk akademickich, jak i przemysłowych, o tym, czy powinienem zawracać sobie głowę Pythonem, czy po prostu stać się naprawdę dobry w tym, co wiem (MATLAB i C ++).

Aktualizacja : Geoff porusza dobrą sprawę, prawdopodobnie powinienem podać więcej szczegółów:

Obecnie jestem studentem ostatniego roku, studiuję matematykę ze specjalizacją w obliczeniach. Chciałbym kontynuować naukę w szkole i kontynuować badania (nigdy nie widziałem, żeby lubiłem uczyć) lub pracować w laboratorium. Oba są idealne. Co do obszarów badań, prawdopodobnie coś podobnego do analizy numerycznej lub prawdopodobieństwa. W przypadku, gdyby plan A nie zadziałał, byłbym otwarty na pracę w przemyśle, o ile przygotowanie się do pracy w branży nie zabiera zbyt wiele czasu ze szkoły. Pomyślałem więc, że powinienem uczyć się języków, które są powszechne w branży, tak jak dla bezpieczeństwa. Ale właśnie dlatego jestem w konflikcie. Nie mogę uczyć się każdego języka ani przygotowywać się na każdą możliwość, ponieważ zajęłoby to zbyt wiele czasu.

AlanH
źródło
1
Twoje pytanie jest dobre, ale prawdopodobnie zbyt otwarte i niejasne. Jakiej dyscypliny się uczysz i co według ciebie możesz chcieć robić?
Geoff Oxberry 30.01.2013
1
Na przykład rzeczy, które można zrobić za pomocą Pythona, które nie działałyby dobrze w MATLAB lub czystym C ++: epubs.siam.org/doi/abs/10.1137/110856976 . (bezwstydny alert autopromocyjny)
David Ketcheson

Odpowiedzi:

15

Trudność z każdym z tych rodzajów pytań polega na tym, że odpowiedź zależy w dużej mierze od społeczności.

Aby odpowiedzieć na niektóre pytania w przypadkowej kolejności:

MATLAB jest często stosowany zarówno w środowisku akademickim, jak i przemysłowym. Jednym z powodów, dla których jest dość często wykorzystywany w przemyśle, jest to, że uczy się go w środowisku akademickim. Wiem na pewno, że MATLAB jest wykorzystywany w Lincoln Laboratory oraz w działach badań i rozwoju firmy DuPont.

Istnieją pakiety oprogramowania napisane w języku Python, które są dobre w obliczeniach symbolicznych, takie jak sympy i SAGE. W zależności od Twoich zainteresowań, wymagań funkcji i osobistych preferencji, Mathematica (lub Maple lub inne systemy algebry komputerowej) mogą być lepsze od tych pakietów.

MATLAB ma Symboliczny zestaw narzędzi matematycznych, którego można używać do niektórych obliczeń symbolicznych, ale jego możliwości manipulacji symbolicznych są, moim zdaniem, słabsze niż Mathematica i Python. Niektóre manipulacje symboliczne można teoretycznie wykonać w C ++, ale jest to niewygodne. MATLAB nie jest także dobrym językiem ogólnego zastosowania. Dobrze radzi sobie z algebrą liniową i matematyką numeryczną, ale nie ma dobrych możliwości wejścia / wyjścia. Nie ma dobrych możliwości równoległych (chociaż istnieją warianty takie jak równoległy MATLAB, MATLAB Star-P i Parallel Computing Toolbox) w porównaniu do C ++ lub Python. Nawet jego możliwości graficzne mogą przydać się. MATLAB jest również drogi, chyba że jesteś powiązany z instytucją posiadającą licencję. Każdy zestaw narzędzi jest drogi w zakupie i generalnie kosztuje od setek do tysięcy dolarów.

Matematyka oprócz obliczeń symbolicznych wykonuje również obliczenia numeryczne. Nie widziałem, żeby ludzie używali go do obliczeń numerycznych tak bardzo, jak widziałem, jak ludzie używają Pythona i MATLABa do pracy numerycznej. Ma również możliwości równoległe, ale nie będzie skalować się do dużych superkomputerów.

Python jest dobrym językiem ogólnego przeznaczenia, który jest uważany za łatwy do nauczenia i przydatny. Jest używany na dużych superkomputerach (patrz na przykład PyClaw, petsc4py, mpi4py i inne) i dobrze się skaluje. Ma również wysoko cenione pakiety numeryczne (takie jak NumPy i SciPy); duża, aktywna społeczność; dobre możliwości przetwarzania danych wejściowych / wyjściowych; i dobre biblioteki graficzne, wraz z dużym repozytorium bibliotek (sprawdź PyPI). Jest bezpłatny, w porównaniu do wyżej wymienionych pakietów zastrzeżonych. Większość funkcji MATLAB lub Mathematica można znaleźć w darmowo dostępnych pakietach Python. Główną wadą Pythona jest to, że jest on wolniejszy niż skompilowane języki, takie jak C ++, chociaż ta wada maleje wraz z ciągłym rozwojem Cython, Numba i PyPy; można go również złagodzić, zastępując wolniejszy kod Pythona kodem C (lub C ++ lub Fortran) i odpowiednio napisanymi opakowaniami Pythona. Podczas interpretacji wiele osób deklaruje wyższą produktywność dzięki Pythonowi niż w językach kompilowanych. Jest dość popularny i prawdopodobnie warto się go nauczyć, jeśli masz czas.

C ++ jest skomplikowanym językiem, a jego użycie w informatyce jest kontrowersyjne. Jego duży zestaw funkcji może ułatwić pisanie oprogramowania, które jest trudne w utrzymaniu i którego kompilacja trwa wiecznie. Jednak rozsądnie wykorzystane funkcje, takie jak szablony i przeciążanie operatora, mogą być zastosowane z wielkim skutkiem, tak jak miało to miejsce w projektach takich jak deal.II, Blaze i Elemental (między innymi). C ++ ma dużą krzywą uczenia się, jeśli chodzi o jego zaawansowane funkcje, i słyszałem niepotwierdzone doniesienia o ludziach, którzy przez lata mieli wrażenie, że nauczyli się pełnego języka. Mimo to jest to popularny język, pomimo obaw związanych z użytecznością i skomplikowanym zestawem funkcji. Prawdopodobnie warto się uczyć, choćby po to, aby zwiększyć szanse na zatrudnienie; jego głównymi konkurentami w dziedzinie obliczeń są Fortran i C, które również warto poznać.

Wszystko, czego się nauczysz, będzie oparte na tym, czego naprawdę potrzebujesz. Oczywiście, miło jest uczyć się zarówno Pythona, jak i C ++, ale biorąc pod uwagę ograniczenia czasowe i zasoby, prawdopodobnie dowiesz się tylko, czego będziesz potrzebować, a to zależy od społeczności, w której pracujesz.

Geoff Oxberry
źródło
Jeśli chodzi o środowisko akademickie, czy powiedzielibyście, że lepiej zainwestować czas w naukę języka Python zamiast C ++?
AlanH
1
Znowu wszystko zależy. Nadal jestem bardziej akademicki i ciągle używam Pythona. Nadal muszę używać C ++ do pracy napisanej w tym języku. Osobiście uważam, że najpierw nauka języka Python prawdopodobnie będzie dla ciebie szybsza niż nauka języka C ++, ale nie wiem, jakich ludzi używają probabiliści / procesy stochastyczne / kombinatoryki, więc twój przebieg może się różnić.
Geoff Oxberry
Zgadzam się z Geoffem, że najpierw nauka języka Python jest dobrym pomysłem, ponieważ pozwoli ci to znacznie przyspieszyć. C ++ jest dobrym językiem, ale krzywa uczenia się jest znacznie wyższa, a nauka bez przekonania jest gorsza niż w ogóle się go nie uczy.
LKlevin
„C ++ ma dużą krzywą uczenia się, jeśli chodzi o jego zaawansowane funkcje, i słyszałem niepotwierdzone doniesienia o tym, że ludzie potrzebowali lat, by poczuć, że nauczyli się pełnego języka”. Tak, nie mogłem się więcej zgodzić. Myślę, że każdy programista wart swojej soli powinien nauczyć się c / c ++ jakiś czas w swoim życiu, ale na pewno zajmie ci to 10000 godzin, aby naprawdę poczuć się ekspertem. +1
James
11

Jak zauważyli Misha i Geoff Oxberry, Mathematica naprawdę ma inne podejście (tylko dlatego, że możesz wbić gwóźdź śrubokrętem, nie oznacza, że ​​powinieneś). Przyjmuję więc twoje pytanie jako „Jeśli znam Matlaba, dlaczego mam się uczyć Pythona?” [Edytuj: i najwyraźniej tak.]

Pod każdym względem Matlab jest angielskim naukowym obliczeniem - ze wszystkimi pozytywnymi i negatywnymi konotacjami, jakie pociąga za sobą ta analogia. Jedną konkretną zaletą jest to, że kod Matlab może być użyteczny (tj. Wykonywalny i zrozumiały) dla większej liczby osób niż kod w jakimkolwiek innym języku. (Jest to główny powód, dla którego dostarczam kody Matlab dla wszystkich moich algorytmów.) Ponadto pulpit Matlab może być bardzo przydatny podczas prototypowania, szczególnie możliwość uruchamiania bitów kodu (komórek) bezpośrednio z edytora, a także wbudowanego w profilerze.

Biorąc to pod uwagę, jeśli chcesz nauczyć się innego języka wysokiego poziomu dla zabawy i zysków, możesz zrobić coś gorszego niż Python. Niektóre powody oprócz tego, co wymienił Geoff:

  • O wiele łatwiej jest łączyć się z zewnętrznymi programami i bibliotekami w Pythonie. Nigdy więcej plików mex!

  • Jeśli nie ma Cię przy komputerze, o wiele łatwiej jest uruchomić Python + NumPy / SciPy niż uzyskać dostęp do licencji Matlab.

  • Głównym powodem, dla którego Matlab jest szybszy niż NumPy, jest to, że łączy zoptymalizowane biblioteki dostawców dla algebry liniowej (MKL, ACML). Możliwe jest ( choć trochę żmudne ) zbudowanie własnego NumPy i połączenie go z tymi samymi bibliotekami, aby uzyskać prawie taką samą wydajność (i wielowątkowość) jak Matlab dla algebry liniowej, a także lepszą wydajność Pythona we wszystkim innym. (Chociaż wymaga to oczywiście licencji nawet do użytku akademickiego, co neguje premię za darmowe oprogramowanie, nadal jest interesującą opcją, aby ten sam kod działał na sponsorowanej przez pracodawcę przyspieszonej instalacji w biurze, a także był dostępny od ręki zainstaluj na swoim komputerze domowym lub notebooku).

  • Podczas gdy skrzynki narzędziowe Matlaba są jednym z jego punktów sprzedaży, istnieje kilka obszarów, w których Python jest daleko przed sobą; w szczególności SymPy i FEniCS pokonać symbolicznej i PDE skrzynki na narzędzia przez szeroki margines.

  • Nie zapomnij o zabawnej części ( niezależnie od semantycznej spacji i wiązania nazwy ): widziałem kilku kolegów ugryzionych przez błąd Pythona, a pisanie twojego algorytmu w Pythonie jest dziwnie satysfakcjonujące, czego nie ma w Matlabie ( chociaż to może być po prostu radość z nauki języka obcego) :)

(Jeśli zaczniesz od NumPy, ta strona może być pomocna).

Christian Clason
źródło
5

Python może zastępować zarówno c ++, jak i Matlab. Jest dobrze rozpowszechniony zarówno w środowisku akademickim, jak i przemysłowym. W przemyśle jest czasem używany jako klej do języków niższego poziomu, głównie c / c ++. Mathematica to zupełnie inna historia. Jego główną zaletą jest to, że wszystkie inne wymienione (c / c ++; Matlab; Python) nie są dobre: ​​w obliczeniach symbolicznych.

Tak więc wszystkie cztery są zupełnie różne: c ++ jest starym i stabilnym językiem programowania o stosunkowo niskim poziomie; Python jest nowym i rozwijającym się językiem komputerowym wysokiego poziomu; Matlab to numeryczne środowisko obliczeniowe z silnym akcentem na algebrę wektorową (chociaż jest w stanie zrobić mniej więcej wszystko); Mathematica to system algebry komputerowej z silnym naciskiem na obliczenia symboliczne (ta sama uwaga, co w przypadku Matlaba). Nie są więc konkurentami.

Misza
źródło
W rzeczy samej; Często jestem zdziwiony (i czasem zadziwiony), gdy widzę, że ludzie używają Mathematiki do obliczeń naukowych ...
Christian Clason
@ChristianClason i Misha: błędne przekonanie, że Mathematica to przede wszystkim system algebry komputerowej. Jeśli spojrzysz na to, jak ludzie faktycznie go używają , większość z nich nie jest algebrą symboliczną, a w kilku polach liczbowych jest konkurencyjna w stosunku do narzędzi takich jak MATLAB i R. (Osobiście wybrałbym Mma w stosunku do pozostałych dwóch do większości zadań przetwarzania danych numerycznych , ale to oczywiście osobiste preferencje.) W niektórych obszarach, takich jak integracja numeryczna lub wizualizacja, wydaje się, że wyprzedza MATLAB. W innych, takich jak rozwiązywanie PDE, jest on daleko w tyle.
Szabolcs
Dla kogoś, kogo interesują wyłącznie obliczenia numeryczne, Python jest alternatywą dla MATLAB, który jest językiem stosunkowo wysokiego poziomu, który ma podobną zdolność do korzystania z procedur bibliotecznych do obsługi znormalizowanych obliczeń obejmujących algebrę liniową, transformaty Fouriera, funkcje specjalne itp. Tak, Python ma znacznie szersze zastosowanie, ale obejmuje wszystko, co możesz zrobić w MATLAB.
Brian Borchers,
4

Wiem, że twoje pytanie dotyczy użycia pytona, ale powiedziałeś, że interesuje Cię „analiza numeryczna lub prawdopodobieństwo”. Nie wiem, czy zastanawiałeś się nad R , ale jest on zaprojektowany specjalnie do tego rodzaju pracy. R jest bardzo potężnym językiem dla prawdopodobieństwa i statystyki oraz ma bardzo dużą i aktywną bazę użytkowników matematyków i naukowców.

R różni się od Matlaba w tym sensie, że jest open-source, skupia się na statystykach i tworzy bardzo imponujące wykresy (patrz ggplot2 ). Możesz zrobić prawie wszystko w R, co możesz zrobić w Matlabie, ale moim ulubionym aspektem jest wkład użytkownika. Większość wniesionych bibliotek jest napisana przez naukowców i opublikowana w czasopiśmie statystycznym. Mają też bardzo dobrze napisane przewodniki (zwane referencjami i winietami). Mój nowy ulubiony biblioteka daje wsparcie CUDA zbudowany na cula bibliotek (darmowy do użytku akademickiego). Istnieje również ogromna liczba metod teorii prawdopodobieństwa (patrz tutaj ).

W każdym razie R jest zdecydowanie zaprojektowany specjalnie dla twojej linii pracy, więc sprawdź to i rozważ dodanie go do swojego zestawu narzędzi :) Pamiętaj, że możesz wykonywać skrypty R w Pythonie i skrypty Pythona w R i łatwo przechwytywać wyniki.

Powodzenia!

D.Deriso
źródło
2

Inni już skomentowali obszernie i bardziej szczegółowo, niż spróbuję tutaj. Chciałbym jednak jeszcze raz podkreślić jedną kwestię: to zależy od twojej społeczności. Na przykład, jeśli pracujesz nad projektem elektrotechnicznym, są szanse, że będziesz używał Matlaba; to samo może być prawdą, jeśli jesteś analitykiem numerycznym, który chce zweryfikować swoje oszacowanie współczynnika konwergencji na prostym problemie modelu.

Z drugiej strony, jeśli interesujesz się właściwym obliczeniem naukowym (np. Symulacją przepływu wokół płata, symulacją syntezy jądrowej w plazmie, symulacją konwekcji w płaszczu ziemi) lub opracowaniem metod numerycznych z myślą o takich zastosowaniach, to lingua franca to C ++. Każdy wielkoskalowy naukowy pakiet komputerowy jest dziś napisany w C ++ (lub C), na lepsze lub gorsze, i tak pozostanie na długo. Aby wymienić tylko kilka przykładów, PETSc oraz niezwykle duże i różnorodne pakiety Trilinos są napisane odpowiednio w C i C ++. Wśród dużych bibliotek elementów skończonych typu open source, o których mogę myśleć (libMesh, deal.II, oofem, freefem), każdy z nich jest napisany w C ++. Wśród programów do wizualizacji dwa największe (Visit i Paraview) są napisane w C ++. Mógłbym rozszerzyć listę.

Chodzi o to, że jeśli jesteś zadowolony z symulacji na małą skalę, ludzie używają jednego języka, ale ilekroć chodzi o poważne, może równoległe obliczenia, wszyscy używają czegoś innego. Na pewno jest to kwestia społeczności, ale także interoperacyjności - jeśli PETSc i Trilinos są napisane w C i C ++, to ja (będąc autorem deal.II) nie mogę łatwo wybrać innego języka, nawet gdybym chciał, ponieważ Muszę współpracować z PETSc i Trilinos.

Wolfgang Bangerth
źródło
1
Szczerze mówiąc, wielu użytkowników PETSc pochodzi z Fortran, a sporo z Pythona. C można łatwo wywołać z prawie dowolnego języka, chociaż programowanie w różnych językach wiąże się z własnym zestawem wyzwań i nie polecam go zbyt często. Zbyt często pomija się kwestię tego, gdzie w stosie znajduje się kod. Na przykład aplikacje użytkowników końcowych powinny dokonywać innych wyborów dotyczących projektowania oprogramowania niż biblioteki na poziomie systemu.
Jed Brown
To uczciwe. Niemniej jednak prawdą jest, że nowsze wystąpienia oprogramowania używanego w obliczeniach na dużą skalę są obecnie w przeważającej części napisane w C i C ++ (pomimo starszych opóźnień napisanych w Fortranie).
Wolfgang Bangerth
1

Aby dodać moje dwa centy, miałem zarówno niedawne doświadczenie akademickie (świeży doktorat :)), jak i doświadczenie branżowe (producent sprzętu geodezyjnego).

Wykonujemy wiele obliczeń numerycznych na słabo osadzonych procesorach (myślę, że są to procesory do telefonów komórkowych). Poza brakiem MATLAB-a dla ARM, C ++ jest królem na tym świecie - wiele wbudowanych zestawów kompilatorów nie zawiera FORTAN!

Chociaż mamy ograniczoną liczbę licencji MATLAB, wymóg, aby produkt pobierający 2 waty mocy wypaczał naszą pracę programistyczną na rzecz C ++, (eksperymentując na bok).

Damien
źródło