wissenschaftliche programmierung mit python - für meteorologie und atmosphärenforschung martin g....

15
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Upload: lieselotte-boeke

Post on 05-Apr-2015

116 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Wissenschaftliche Programmierung mit Python

- für Meteorologie und Atmosphärenforschung

Martin G. Schultz

Teil 3: Numpy

Page 2: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Das numpy Modul

(from numpy user‘s guide)

Numpy is the fundamental package for scientific computing in Python. It is a Python library that provides a multidimensional array object, various derived objects (such as masked arrays and matrices), and an assortment of routines for fast operations on arrays, including mathematical, logical, shape manipulation, sorting, selecting, I/O, discrete Fourier transforms, basic linear algebra, basic statistical operations, random simulation and much more.

Page 3: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Zeitmessung in PythonEinfachste Version:

Mit dem timeit Modul:

Profiling:cProfile (oder profile) module; siehe http://docs.python.org/library/profile.html

Page 4: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Numpy Effizienz Demo

4

3.998 s

3.236 s

5.591 s

0.031 s

Beachte außerdem die einfache Syntax!

Page 5: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Numpy arrays

5

• feste Länge• alle Elemente vom gleichen Typ (können aber auch Python Objekte sein)• können mehrdimensional sein• abgeleitete Typen sind Matrizen, masked arrrays und record arrays• viele wissenschaftliche Pakete erzeugen oder arbeiten mit numpy arrays

Erzeugung von numpy arrays:

ACHTUNG: kann zu falschen Ergebnissen führen (Rundungsfehler)!

Mehr Infos: http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html

Page 6: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Eigenschaften von numpy arrays

aus Vorlesung M. Buchholz, TU München

Array Manipulation:a.reshape() : verändert Form; Zahl der Werte bleibt gleich

a.resize(): verändert Zahl der Werte (und Form)

a.transpose(): transponiert array

a.flatten(): wandelt array in einen 1-D Vektor um

[es gibt noch weitere…]

Page 7: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Numpy dtypes

numpy.dtype ist (natürlich) ein Objekt und kann auf verschiedene Weisen spezifizert werden…array.dtype gibt den Datentyp zurück.np.uint32(array) wandelt ein array in einen anderen Datentyp (hier uint32) um.

Charactercode?ihilqHILQd

fgFDG

Page 8: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Numpy indexingSingle-element indexing: (wie bei normalen Python Listen)- array[5] : beginnt bei 0, negative Zahlen=Index ab Ende- ist array mehr-dimensional, wird ein sub-array extrahiert

Multi-dimensional indexing:- array[2, 3] : äquivalent zu array[2][3], aber effizienter

Slicing und strides:- array[1:7:2] : wie bei Listen etc.- array[1:7:2,2:3] : auch mehr-dimensional möglich

Es können auch (Index)arrays oder Listen zum Indizieren verwendet werden, sowie boolean arrays der gleichen Form (shape)

Mehr: Siehe numpy User‘s guide bzw. http://docs.scipy.org/doc/numpy/reference/

Numpy benutzt „C-style indexing“: die letzte Dimension variiert am schnellsten.

Page 9: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Beispiel:

Filtern durch Indizierung

Page 10: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Beispiel:

Schleifenzugriff auf arrays

Page 11: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

„Broadcasting“Numpy arrays können mit Skalaren oder arrays anderer Dimensionalität verknüpft werden, sofern sie „kompatibel“ sind. Das nennt man „broadcast“.

Beispiel:

Produziert einen Fehler, weil ein 2x2 Array nicht eindeutig mit einem 5x4 Array verknüpft werden kann.

Page 12: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Weitere Numpy Funktionalität

if interested: http://docs.scipy.org/doc/numpy/reference/

Noch viel mehr statistische und andere mathematische Funktionen werden durch das SciPy Paket zur Verfügung gestellt.

Page 13: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

aus Vorlesung M. Buchholz, TU München

Page 14: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

Numpy array Schmankerl

14

siehe: http://www.python-kurs.eu/numpy.php undhttp://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html

Zeichensparende Methode, um Arrays mit Sequenzen zu erzeugen:

a = np.r_[-5.:5.:21j] Zahl der Elemente als komplexer „Stride“

erzeugt: [-5.,-4.5,-4.,…,4.5,5.]

wie np.linspace(-5.,5.,21) np.arange(-5.,5.,0.5) hört bei +4.5 auf

Kann auch bei mehrdimensionalen Arrays verwendet werden, z.B. durchX, Y = np.mgrid[0:360:37j, -10:10:21j] äquivalent zu np.index(…)

Page 15: Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung Martin G. Schultz Teil 3: Numpy

15

Aufgaben

1. Erzeuge ein numpy float array mit Quadratzahlen von 1**2 bis 10**22. Berechne die Summe, den Mittelwert und den Median des soeben

erzeugten arrays (benutze die numpy Funktionen sum(), mean(), und median()

3. Erzeuge ein zweites array der gleichen Größe und kopiere a) die ersten vier Elemente des Quadratzahl-Arrays hineinb) alle geraden Quadratzahlen hineinc) alle Quadratzahlen > 22 hinein(dazu muss das neue Feld zwischendurch wieder auf Null gesetzt werden