Python w obliczeniach naukowych i inżynierskich
19.06.2010 | aktual.: 20.06.2010 00:35
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ń.