Strona używa cookies (ciasteczek). Dowiedz się więcej o celu ich używania i zmianach ustawień. Korzystając ze strony wyrażasz zgodę na używanie cookies, zgodnie z aktualnymi ustawieniami przeglądarki.    X

Python w obliczeniach naukowych i inżynierskich

Powszechnie uważa się, że język programowania Python i wydajność to dwa pojęcia, które się wzajemnie wykluczają. Co zatem sprawia, że Python stanowi podstawę kilku programów do obliczeń naukowych i inżynierskich? Python jest językiem interpretowanym, stosującym dynamiczne typowanie (podobnie jak Matlab). Posiada prostą i czytelną składnię oraz dużą liczbę bibliotek/modułów. Wiele środowisk programistycznych (np. Eclipse+Pydev) i notatników (np. SciTe) wspiera Pythona. Całość uzupełnia Sphinx - prosty i elastyczny generator dokumentacji.

Do programów (a właściwie dystrybucji) przeznaczonych do obliczeń naukowych i inżynierskich zaliczamy:

- SageMath- Python(x,y)- Enthought Python Distribution

Stanowią one zbiór bibliotek, modułów i aplikacji. Cześć z nich została w całości lub zdecydowanej większości napisana w C, np. NumPy - podstawa każdej z tych dystrybucji.

Najbardziej znany jest Sage. Do jego promocji przyczynia się aktywny udział w serwisach społecznościowych. SageMath znajdziemy m.in. na facebooku, twitterze, friendfind, LinkedIn. Informacje na temat rozwoju możemy uzyskać na blogach, a pomoc na kanale IRC lub grupach dyskusyjnych. Sage stara się być przede wszystkim wolną alternatywą dla komerycjnych pakietów matematycznych jak Magma, Maple, Mathematica i Matlab. Cechą, która wyróżnia Sage jest przede wszystkim interfejs. Poza wierszem poleceń mamy dostępny interfejs w postaci strony www uruchamianej w przeglądarce, tzw. Sage Notebook, który można przetestować również online na stronie projektu. Po zalogowaniu na stronie możemy wykonywać obliczenia "w chmurze", a wyniki publikować w sieci (Przykłady). Proste obliczenia możemy wykonać w WolframAlpha, niestety nie ma tam możliwości pisania skryptów co daje Sage przewagę. Sage zbudowany jest z blisko 100 komponentów o ujednoliconym interfejsie. Jak wypada Sage na tle komercyjnej konkurencji możemy prześledzić w wynikach benchmarków. Na dzień dzisiejszy Sage skierowany jest głównie dla użytkowników Linuksa, dla których zostały przygotowane paczki do niemal wszystkich popularnych dystrybucji, oraz użytkowników MacOS X. Użytkownicy Windowsa mogą skorzystać z wersji przygotowanej pod VirtualBox. Korzystanie z wirtualnej maszyny nie jest jednak najwygodniejszym i najbardziej efektywnym rozwiązaniem. Dlatego użytkownicy Windowsa powinni raczej sięgnąć po drugą pozycję z listy, czyli Python(x,y).

Python(x,y) to zestaw bardzo starannie dobranych bibliotek i narzędzi. Na stronie projektu w dziale standard plugins możemy prześledzić główne komponenty tej dystrybucji wraz z krótkim opisem. Cechą wyróżniającą Python(x,y) jest świetne IDE MATLAB-like - Spyder.

Listę zamyka komercyjna dystrybucja Enthought Python Distribution. EPD został wzbogacony o Intel MKL. Biblioteka ta zapewnia duży wzrost wydajności obliczeń z zakresu algebry liniowej, szczególnie na procesorach Intel. Jak duże są różnice w wydajności możemy przeczytać na blogu. Na blogu tym znajdziemy również ciekawe porównanie NumPy/MKL vs Matlab. Na stronie EPD udostępniono 32-bitową wersję, z której można korzystać przez 30-dni (ograniczenie to nie dotyczy studentów).

Do wizualizacji wyników zarówno w Python(x,y) jak i w EPD poza najpopularniejszą biblioteką matplotlib możemy posłużyć się także Chaco, który umożliwia wykonywanie wykresów 2D oraz Mayavi do zaawansowanych wizualizacji i wykresów 3D.

Każda z tych dystrybucji to przynajmniej kilkaset MB bibliotek i narzędzi. Nie każdy potrzebuje wszystkie te funkcje. Warto zapoznać się z nimi, przetestować i wybrać to co może okazać się przydatne. Podstawę stanowi zwykle oprócz Pythona:

- NumPy - przeznaczone do obliczeń numerycznych
- SciPy - rozszerzające możliwości NumPy o całkowanie numeryczne, optymalizację itd
- SymPy - służące do obliczeń symbolicznych
- matplotlib - wykresy 2D i 3D
- IPython + PyReadline - interaktywna powłoka Pythona

W krótkim wpisie nie da się opisać nawet niewielkiej części możliwości jakie oferują te pakiety, ale informacje tu zawarte mogą być punktem wyjścia do dalszych poszukiwań. 

Komentarze

0 nowych
Smoczysko   1 #1 19.06.2010 23:08

A czy w swojej pracy z Python'em natknąłeś się może na Jython'a (http://www.jython.org/)? To wersja Python'a na Wirtualną Maszynę Javy i ciekaw jestem ogromnie zastosowania Jython'a do obliczeń numerycznych.

iluzion   5 #2 19.06.2010 23:36

@Smoczysko

Jython chyba nie ma większego zastosowania w tej dziedzinie. Dużo większym zainteresowaniem cieszy się Cython, który również wchodzi w skład tych pakietów. Sposobów na zwiększenie wydajności jest na pewno kilka, ale do użytku prywatnego nie ma potrzeby po nie sięgać, chyba że wykonuje się naprawdę złożone obliczenia.

Smoczysko   1 #3 19.06.2010 23:51

@iluzion
No właśnie przymierzam się do złożonego zagadnienia numerycznego na uczelni i chciałbym wykonać go pragmatycznie (z użyciem wielu narzędzi, takich jak języki programowanie, bo za takie je tylko traktuje) a Twój wpis bardzo mnie zaciekawił. I chodzi raczej o tworzenie numeryki od zera, bez dodatkowych bibliotek.

iluzion   5 #4 20.06.2010 00:29

@Smoczysko

Jeśli nie zamierzasz korzystać z dodatkowych bibliotek to wtedy może Jython ma sens. W przeciwnym razie prawdopodobnie byłby problem np. z NumPy (http://stackoverflow.com/questions/316410/is-there-a-good-numpy-clone-for-jython). Jeżeli jest to złożone zagadnienie numeryczne to może warto sięgnąć od razu po Fortran? Mógłbyś skorzystać z gotowych procedur LAPACK pobierając je z tej strony http://www.cs.colorado.edu/~jessup/lapack/.

przemo_li   11 #5 20.06.2010 09:45

:) niezły wpis, plus dla Ciebie
może pójdziesz za ciosem i napiszesz jakiś tutorial, albo opiszesz poszczególne biblioteki (NumPy, Matplotlib, etc.)

PS natknąłeś się na dobrą bibliotekę do sztucznych sieci neuronowych ? Korzystałem z np. PyBrain. Ale jak potrzebowałem czegoś podobnego do trainbpx (metoda momentum + adaptacyjna zmiana learning rate) to niczego nie znalazłem (niczego udokumentowanego) :( i się teraz Matlab na VirtualBoxie męczy :(

iluzion   5 #6 20.06.2010 10:19

@przemo_li

Może tutorial pokazujący podstawy tych bibliotek się pojawi. Temat sztucznych sieci neuronowych jest mi obcy;)

Spawnm   2 #7 20.06.2010 10:45

Ciekawy wpis, fajnie że pokazujesz jak duże możliwości posiada python .
Jednak mała uwaga:
"Posiada prostą i czytelną składnię"
Dla kogo ? Bo dla mnie jest fatalne.
Jest to sprawa indywidualna i dziwi mnie propagowanie tego języka na tego typu teksty...

przemo_li   11 #8 20.06.2010 11:15

@Spawnm ilość/jakość/rozmiar przedstawionych środowisk świadczy, że Python jest OK dla dużej liczby naukowców :)
Tylko w Polsce jakoś się nie słyszy o Pythonie, więc takie teksty są jak najbardziej potrzebne. Szczególnie że pokazują alternatywę wobec pewnych drogich i nie zawsze legalnie zdobytych środowiskach zazwyczaj stosowanych.

iluzion   5 #9 20.06.2010 12:01

@Spawnm

"Dla kogo?" Dla użytkowników Matlaba.

Poprzednie zdanie uzasadnia w pewnym stopniu prostą i czytelną składnię. Nie jest to mój wymysł, ani propaganda. Ten argument spotkasz w praktycznie każdym opisie czy książce na ten temat np. "Numerical Method in Engineering with Python".

GL1zdA   11 #10 20.06.2010 12:06

Bardzo dobry wpis. Warto wiedzieć o narzędziach przydatnych do zastosowań na uczelni i w pracy. A Python bardzo często bardzo dobrze nadaje się do takich zadań.

GL1zdA   11 #11 20.06.2010 12:06

Bardzo dobry wpis. Warto wiedzieć o narzędziach przydatnych do zastosowań na uczelni i w pracy. A Python bardzo często bardzo dobrze nadaje się do takich zadań.

borzole   4 #12 20.06.2010 12:48

Zawsze mnie ciekawiło, jak to wypada wydajnościowo przy C/FORTRAN?

iluzion   5 #13 20.06.2010 13:58

@borzole

Te pakiety nie mają na celu konkurować z C czy z Fortranem. Ciężko byłoby rywalizować z Fortranem w kwestii wydajności. Raczej dążą do tego, żeby współpracować z tymi językami (http://www.scipy.org/F2py).

Poza tym mamy tu do czynienia z językiem skryptowym, a nie kompilowanym, więc lepiej porównywać z innym językiem skryptowym, np. Matlabem. Jak widać w podlinkowanych porównaniach wypada całkiem nieźle.

Pigmej   5 #14 20.06.2010 14:20

@iluzion

Co do polepszania wydajności Py...

Mamy Corepy (assembler via Python) - no... szybki
Mamy shedskina (kompilator kodu Py do Cpp) - również szybki, można kompilować kod do "modułów" py.

Do tego można podpiąć psyco2 (JIT) i w efekcie uzyskujesz prosto napisany, wydajny kod.

Pigmej   5 #15 20.06.2010 14:22

ps. co do powłok interaktywnych. Dla początkujących w Py lepsza chyba nawet będzie bPython.

borzole   4 #16 20.06.2010 16:19

@iluzion
no to ile mniej więcej ? :)

Poszerzając temat: "Python w komputerowych systemach pomiarowych"
http://notatnik.mekk.waw.pl/archives/182-Pycon_2009_-_relacji_czesc_druga.html
Wydaje się, że python podobnie jak java to "pojęcie guma"

iluzion   5 #17 20.06.2010 16:53

@borzole

Python (estimate) - 1500.0 s
Python + Psyco (estimate) - 1138.0 s
Python + NumPy Expression - 29.3 s
Blitz - 9.5 s
Inline - 4.3 s
Fast Inline - 2.3 s
Python/Fortran - 2.9 s
Pyrex - 2.5 s
Matlab (estimate) - 29.0 s
Octave (estimate) - 60.0 s
Pure C++ - 2.16 s

Źródło: http://www.scipy.org/PerformancePython

dsp32bit   6 #18 21.06.2010 14:39

@przemoli przeciez jest matlab pod linuxa.... i nie trzeba virtualboxa XD ja tylko musialem wylaczyc pulpit 3d :D a wiekszosc jesli nie wszystkie toolboxa sa :)

  #19 15.09.2011 23:25

Zwolennikom pythona i fanom TeX-a/LaTeX-a może się spodoba prosty pakiecik do obliczeń inżynierskich, który interpretuje elementy składni (La)TeX-a na pythona i dokonuje obliczeń generując (La)TeX-a z obliczeniami. Ja używam go jako prostego narzędzia do obliczeń typu MathCAD-a pod Linuxa, Androida, Cygwina (windows). Przydatny do generowania ładnie wyglądających obliczeń za pomocą pythona, jak prac dyplomowych, projektów, zbiorów zadań z rozwiązaniami czy projektów inżynierskich.