Präsentation herunterladen
Veröffentlicht von:Lieselotte Boeke Geändert vor über 10 Jahren
1
Wissenschaftliche Programmierung mit Python - für Meteorologie und Atmosphärenforschung
Martin G. Schultz Teil 3: Numpy
2
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.
3
Zeitmessung in Python Einfachste Version: Mit dem timeit Modul:
Profiling: cProfile (oder profile) module; siehe
4
Numpy Effizienz Demo 3.998 s 3.236 s 5.591 s 0.031 s
Beachte außerdem die einfache Syntax!
5
Numpy arrays Erzeugung von numpy arrays: 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: weitere Array-Erzeugungsmethoden sind empty (keine Initialisierung schneller) identity (quadratische Diagonalmatrix mit 1); für Rechteckmatrix: eye *_like methods (siehe from_... methods; in particular numpy.fromfunction(function, shape, **kwargs) Beispiel aus Buchholz (TU München): fromfunction ( lambda i,j: i+j, (3 ,4) , dtype = int) def f(i,j): return i+j fromfunction (f, (3 ,4) , dtype = int) ACHTUNG: kann zu falschen Ergebnissen führen (Rundungsfehler)! Mehr Infos:
6
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…]
7
Numpy dtypes Character code
? i h l q H I L Q d f g F D G außerdem: S1 : character B : unsigned character O : object S : string U : unicode V : void b : signed char 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.
8
Numpy indexing Single-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. Index-Filters (ungemein praktisch, aber wie steht es mit der Effizienz?): a[a>9] -= 9 Numpy benutzt „C-style indexing“: die letzte Dimension variiert am schnellsten.
9
Filtern durch Indizierung
Beispiel:
10
Schleifenzugriff auf arrays
Beispiel: nach M. Buchholz
11
„Broadcasting“ Beispiel:
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.
12
Weitere Numpy Funktionalität
if interested: Noch viel mehr statistische und andere mathematische Funktionen werden durch das SciPy Paket zur Verfügung gestellt. zum Beispiel array Multiplikation: dot(x,y), inner(x,y), cross(x,y)
13
aus Vorlesung M. Buchholz, TU München
14
Numpy array Schmankerl
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. durch X, Y = np.mgrid[0:360:37j, -10:10:21j] äquivalent zu np.index(…) siehe: und
15
Aufgaben Erzeuge ein numpy float array mit Quadratzahlen von 1**2 bis 10**2 Berechne die Summe, den Mittelwert und den Median des soeben erzeugten arrays (benutze die numpy Funktionen sum(), mean(), und median() Erzeuge ein zweites array der gleichen Größe und kopiere die ersten vier Elemente des Quadratzahl-Arrays hinein alle geraden Quadratzahlen hinein alle Quadratzahlen > 22 hinein (dazu muss das neue Feld zwischendurch wieder auf Null gesetzt werden z.B.: a = np.array([x*x for x in np.arange(1.,11.)]) -- Achtung “11.” ist notwendig, um ein float array zu bekommen np.sum(a), np.mean(a), np.median(a) b=np.zeros_like(a) oder b=np.array(0.*a) oder b=np.zeros(len(a)) oder b=np.zeros(a.shape) b[0:3] = a[0:3] b[1::2]=a[1::2] b[a>22]=a[a>22]
Ähnliche Präsentationen
© 2025 SlidePlayer.org Inc.
All rights reserved.