Blog (29)
Komentarze (476)
Recenzje (0)
@iluzionNumPy - mini tutorial

NumPy - mini tutorial

05.07.2010 21:52

Czym jest NumPy?

NumPy jest podstawowym pakietem wykorzystywanym do obliczeń naukowych w języku Python. Pozwala między innymi na wykonywanie wydajnych operacji na macierzach, obliczenia numeryczne, obliczenia z zakresu algebry liniowej, FFT etc. Stanowi darmową alternatywę dla MATLAB-a. (więcej)

W programach do obliczeń numerycznych typu MATLAB należy dążyć do maksymalnej wektoryzacji kodu (1). Pozwala to zwiększyć efektywność obliczeń (2).

Jak korzystać z tego tutorialu?

Tutorial przeznaczony jest dla osób poszukujących darmowej alternatywy dla MATLAB-a. Z założenia stanowić ma wprowadzenie do czytelnej dokumentacji.

Instalacja

Na potrzeby poniższego tutorialu wymagany będzie:

- Python - NumPy

lub jedno ze środowisk opisane w "Python w obliczeniach naukowych i inżynierskich".

Wstęp

Po zainstalowaniu Pythona i NumPy uruchamiamy z menu start IDLE (Python GUI) lub dowolne IDE obsługujące Pythona. Przed przystąpieniem do obliczeń należy zaimportować NumPy. Sposobów na to jest kilka.

Najczęściej wykorzystywane to:

import numpy as np

oraz

from numpy import *

Różnice między nimi najprościej jest przeanalizować na przykładzie.

>>> import numpy as np
>>> np.pi * np.sqrt(4.0)
6.2831853071795862
>>>
>>> from numpy import *
>>> pi * sqrt(4.0)
6.2831853071795862
>>> 

Jak widać drugi sposób jest wygodniejszy w użyciu i bardziej intuicyjny dla użytkowników MATLAB-a. Aby nie powtarzać czynności związanych z importowaniem NumPy przy każdym uruchomieniu wygodnie jest zainstalować interaktywną powłokę IPython + PyReadline.

Po uruchomieniu PyLab z menu Start możemy przystąpić do obliczeń.

368886

Na początku jednak warto zaznajomić się z powłoką. Do ważniejszych jej cech należy uzupełnianie poleceń/wyświetlanie podpowiedzi po wciśnięciu Tab, wyświetlanie pomocy dla polecenia object?, możliwość odwoływania się do wcześniejszych wyników Out[x] tak jak w programie Mathematica. Aby wkleić przykład, fragment skryptu itp. należy wpisać cpaste, wkleić zawartość schowka, a następnie w nowej linii dodać -‑. Po zatwierdzeniu Enterem polecenia zawarte między cpaste, a -- zostaną wykonane.

Podstawowe operacje na macierzach

Podstawowy typ danych w NumPy stanowią macierze matrix oraz tablice array, które różnią się między sobą sposobem działania operatora * (mnożenie).

Występowanie tych dwóch typów oraz różne sposoby ich użycia wprowadzają użytkowników MATLAB-a w pewną dezorientację. O różnicach pomiędzy nimi można przeczytać na stronie NumPy for Matlab Users.

Najistotniejsze różnice to:

1. Obiekty klasy matrix można mnożyć podobnie jak w MATLAB-ie za pomocą *. Mnożenie elementu przez element odbywa się przy pomocy polecenia multiply().

2. Obiekty klasy array mnożymy za pomocą funkcji dot(), natomiast * oznacza mnożenie elementu przez element.

Podsumowując możemy przyjąć, że najbardziej odpowiednim dla większości przypadków rozwiązaniem jest stosowanie array. Jedyny problemem jest mnożenie wielu macierzy, gdzie zapis dot(dot(A,B),C) w przeciwieństwie do znanego z MATLAB-a A*B*C nie jest najwygodniejszym rozwiązaniem. W takich przypadkach możemy wykorzystać obiekt matrix. Obiekty matrix, array możemy stosować wymiennie. Dla obiektu array możliwe są typowe działania (*, /, +, ** etc.) wykonywane element po elemencie.

Rozważmy układ równań liniowych:

368896

Zapiszmy macierze współczynników i wyrazów wolnych.

 A = array([[1,-2,3],[-1,1,5],[-2,-1,1]])
B = array([[ 5, 10,  0]]).T

gdzie .T oznacza transpozycję.

Na tak zdefiniowanych macierzach możemy przetestować wyżej wymienione funkcje i operacje. Aby rozwiązać powyższy układ równań należy skorzystać z polecenia:

print linalg.solve(A,B)

Operacje na macierzach najprościej przećwiczyć na losowo generowanych macierzach o różnych rozmiarach, np.

D = rand(5,5)
inv(D) # macierz odwrotna
368905

Należy oczywiście pamiętać o zachowaniu zasad obowiązujących w matematyce;)

Ostatnią kwestią, na którą warto zwrócić uwagę i która wprowadza nieco zamieszania wśród użytkowników MATLAB-a jest rozpoczynanie się numeracji od zera. Np. element w pierwszym wierszu i pierwszej kolumnie macierzy A wywołamy w MATLAB-ie przy pomocy A(1,1), a w NumPy poprzez A[0,0].

Mam nadzieję, że ten wstęp pozwoli bez przeszkód sięgnąć do dokumentacji w celu głębszego zapoznania się z możliwościami NumPy.

Wybrane dla Ciebie
Komentarze (9)