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

Slides:



Advertisements
Ähnliche Präsentationen
Imperative Programmierung
Advertisements

Sortieren I - Bubblesort -
Pascal-Datentypen Skalare Typen Zeiger- Typen Strukturierte Typen
Seminar Stochastik im WS 02/03
der Universität Oldenburg
Datenstrukturen Look-Up Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung.
Sequentielle Liste - Array
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Sortierverfahren Richard Göbel.
Java: Grundlagen der Sprache
Bilder und Rasterdaten
ARRAY oder FELD oder VEKTOR
Spektralanalyse Spektralanalyse ist derart wichtig in allen Naturwissenschaften, dass man deren Bedeutung nicht überbewerten kann! Mit der Spektralanalyse.
XHTML 1.1 C. Nimz Abstrakte Module XHTML 1.1 C. Nimz Was ist ein abstraktes Modul? Definition eines XHTML-Moduls in spezieller leichter.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung Arrays-
Die Skriptsprache Perl (6) Wolfgang Friebel DESY Zeuthen.
Die Skriptsprache Perl (8) Wolfgang Friebel DESY Zeuthen.
DVG Klassen und Objekte
Einführung in die Programmierung Datensammlung
RelationentheorieObjektorientierte Datenbanken AIFB SS Das ODMG-Objektmodell vs. relationales Modell (1/9) ODMG-Objektmodell Literal_type Atomic_literal.
FH-Hof Algorithmen und Datenstrukturen - Einführung Richard Göbel.
Java programmieren mit JavaKara
§24 Affine Koordinatensysteme
Kontrollstrukturen Verwendung: Steuerung des Ablaufs.
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Proseminar an der TU München Martin Levihn
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Einführung in die Programmiersprache C 3.Tag Institut für Mathematische Optimierung - Technische Universität Braunschweig.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Chair of Software Engineering Einführung in die Programmierung Prof. Dr. Bertrand Meyer Lecture 13: (Container-)Datenstrukturen.
Typo3 Templates und TypoScript
Polynome und schnelle Fourier-Transformation
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Programmierung
Windows Presentation Foundation, Vorlesung Wintersemester 2013/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 7 Folie 2 Styles (1) s.a.
Einführung in die Programmiersprache C 4
Informatik 1 Letzte Übung.
Lineare Algebra, Teil 2 Abbildungen
Vom Umgang mit Daten. public void myProgram() { int[] saeulenWerte = new int[world.getSizeX()]; for (int i = 0; i < saeulenWerte.length; i++) { saeulenWerte[i]
Dynamische Datentypen
PHP Basic.
Torque in Turbine Team 4 Josef Bohninger Thomas Lindenhofer
Einführung in PHP.
Einführung in PHP 5.
CuP - Java Vierte Vorlesung Entspricht ungefähr Kapitel 2.1 des Skriptums Montag, 14. Oktober 2002.
Arrays und ArrayLists In JAVA.
Agenda für heute, 28. April, 2005 Strukturierte VariablenStrukturierte Variablen Arrays.
Programmieren in C Grundlagen C 2
PHP: Operatoren und Kontrollstrukturen
1 Tagesüberblick 2 Lösung Hausaufgabe/Fragen Datei- ein- und ausgabe Schleifen Vergleiche Wahrheit.
Programmiervorkurs WS 2014 Referenzdatentypen
SFZ FN Sj. 13/14 Python 2 Turtle Inf K1/2 Sj 13/14 GZG FN W.Seyboldt.
CuP - Java Achte Vorlesung Entspricht ungefähr Kapitel 4.1 des Skriptums Montag, 28. Oktober 2002.
Arrays und ArrayLists In JAVA.
Java-Kurs - 3. Übung Hausaufgabe Arrays For-Schleifen.
Digitale Annotationen. Grundlage: John Bradley “Towards a Richer Sense of Digital Annotation: Moving Beyond a Media Orientation of the Annotation of Digital.
Diskrete Mathematik I Vorlesung 2 Arrays.
(Syntax, Strings/Zahlen, Variablen, Arrays)
Mag. Thomas Hilpold, Universität Linz, Institut für Wirtschaftsinformatik – Software Engineering 1 Algorithmen und Datenstrukturen 1 SS 2002 Mag.Thomas.
Java-Kurs Übung Besprechung der Hausaufgabe
6. Thema: Arbeiten mit Feldern
Pointer, Arrays und verkettete Listen. Mehrdimensionale Arrays  Pointer auf ein Array von Pointern  int32 **matrix = new int32*[3];  matrix: Zeiger.
Zufall in Java Zwei Möglichkeiten.
Arrays of Objects, a 3 part process
 Präsentation transkript:

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.

Zeitmessung in Python Einfachste Version: Mit dem timeit Modul: Profiling: cProfile (oder profile) module; siehe http://docs.python.org/library/profile.html

Numpy Effizienz Demo 3.998 s 3.236 s 5.591 s 0.031 s Beachte außerdem die einfache Syntax!

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 http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html) 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: http://docs.scipy.org/doc/numpy/reference/routines.array-creation.html

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…]

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.

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. http://docs.scipy.org/doc/numpy/reference/ 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.

Filtern durch Indizierung Beispiel:

Schleifenzugriff auf arrays Beispiel: nach M. Buchholz

„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.

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. zum Beispiel array Multiplikation: dot(x,y), inner(x,y), cross(x,y)

aus Vorlesung M. Buchholz, TU München

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: http://www.python-kurs.eu/numpy.php und http://docs.scipy.org/doc/numpy/reference/generated/numpy.r_.html

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]