Python voor Natuur- en Sterrenkundigen Week 3

Vergelijkbare documenten
Programmeermethoden NA. Week 8: NumPy

Programmeermethoden NA. Week 9: NumPy & Matplotlib

Programmeermethoden NA. Week 9: NumPy & Matplotlib

Workshop Python voor Wis- en Natuur/ Sterrenkundigen

Workshop Python voor Wis- en Natuur/ Sterrenkundigen

Python voor Natuur- en Sterrenkundigen Week 4

Python voor Natuur- en Sterrenkundigen Week 2

Programmeermethoden NA

Programmeermethoden NA

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 5: Functies (vervolg)

Python voor Natuur- en Sterrenkundigen Week 1

Programmeermethoden NA. Week 7: OOP & modules

Programmeermethoden NA. Week 5: Functies (vervolg)

Tussentoets Programmeren en genomics, 8CA10, versie A 17 maart 2017, u.

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 mei 2014

Opdracht 1: Introductie Python

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Programmeermethoden NA. Week 10: NumPy, Python module showcase

Inleiding Programmeren 2

Inleiding Programmeren 2

Programmeermethoden NA. Week 10: NumPy, ipython, Python module showcase

TECHNISCHE UNrVERSITElT DELFT Faculteit Elektrotechniek, Wiskunde en Informatica

Niet-numerieke data-types

SQL Aantekeningen 3. Maarten de Rijke 22 mei 2003

Het berekenen van coördinaten van bijzondere punten van een grafiek gaat met opties uit het CALC-menu.

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

PLANETENSTELSELS - COMPUTER PRACTICUM 1 EN 2. Inleveren opdrachten en eisen verslag

3. Structuren in de taal

Inleiding Programmeren 2

PLANETENSTELSELS - WERKCOLLEGE 1. Opdracht 1a: Introductie Python

Programmeren. a. 0, 0, 0 b. 0, 0, 27 c. 15, 12, 0 d. 15, 12, 27

Javascript oefenblad 1

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Functioneel programmeren

OEFENINGEN PYTHON REEKS 1

Python voor dataanalyse

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

Programmeermethoden NA

Algemeen. Rorschachtest. Algemene info

Bijlage Inlezen nieuwe tarieven per verzekeraar

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Algemeen. Opgemaakte tekst: de stringmethode format

Programmeermethoden NA. Week 4: Files & Functies

In dit document staat beschreven hoe je de meetgegevens vanuit Coach kunt opslaan en later in kunt lezen in Excel en hier een grafiek van kunt maken.

Inleiding Programmeren 2

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Inleiding Programmeren 2

Programmeren (1) Examen NAAM:

RAAD HET GETAL. Hoofdstuk 4. Het spelletje 'Raad het getal' Voorbeeld van uitvoering van 'Raad het getal' Hoofdstuk 4 Raad het getal 21

Informatica: C# WPO 13

OEFENINGEN PYTHON REEKS 1

Informatica: C# WPO 12

Programmeren PYTHON OEFENTENTAMEN 2. Schrijf jouw antwoorden op dit tentamen. Tijd: 2 uur. Maximaal aantal punten: 32. Naam: Studentnummer:

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Zo gaat jouw kunstwerk er straks uitzien. Of misschien wel heel anders.

Export/Import van Straten

Het warmteverlies van het lichaamsoppervlak aan de wordt gegeven door de volgende formule:

Het relaas van de beginnende programmeur. Het hoe en waarom van de assistent

Tentamen Programmeren in C (EE1400)

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

INHOUDSOPGAVE. Over de auteur, de illustrator en de technische redacteuren 13

DATABASEBEHEER IN EXCEL

Meten, weten & beleid. 'Kennisopbouw en kennisuitwisseling databeheer' Workshop 4 2. En in Gent? Stadsmonitorresultaten in vogelvlucht.

Modelleren en Programmeren

Programmeermethoden. Talen: Python,... Walter Kosters. week 14: december kosterswa/pm/

Van CaseTalk naar een database in SQLite studio

Release notes Swing & 5.0.7

Handleiding Excel. bij. hoofdstuk 18 Cijfers in Orde Wageningse Methode

A Python Crash Course

AFO Beheer sjablonen voor documenten

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje:

Uitleg. Welkom bij de Beverwedstrijd Je krijgt 15 vragen, die je in maximaal 45 minuten moet beantwoorden.

Informatica: C# WPO 5

Proefstuderen Informatica

1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x.

25 Excel tips. 25 Handige Excel tips die tijd besparen en fouten voorkomen. Ir. Fred Hirdes. Excel-leren.nl.

1.0 Voorkennis. Voorbeeld 1: Los op: 6x + 28 = 30 10x.

Objective-C Basis. 23 april 2005, Eindhoven Patrick Machielse

Een korte samenvatting van enkele FORTRAN opdrachten

In het CMS is het mogelijk om formulieren aan te maken. Voorafgaand een belangrijke tip:

Computervaardigheden I

Opdracht 3: Baanintegratie: Planeet in een dubbelstersysteem

Modelleren en Programmeren

Disclaimer Het bestand dat voor u ligt, is nog in ontwikkeling. Op verzoek is deze versie digitaal gedeeld. Wij willen de lezer er dan ook op wijzen

OEFENINGEN PYTHON REEKS 5

OEFENINGEN PYTHON REEKS 1

13. Symbool-, Lijnstijlbibliotheek (Resource Editor)... 1

P2 Exponentiële groei

MINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara

Een topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Technische nota AbiFire5 Export/Import van Hydranten

Grafieken maken met Excel

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Tentamen Programmeren in C (EE1400)

OEFENINGEN PYTHON REEKS 4

Versieperikelen. Bijlage C

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

Transcriptie:

Python voor Natuur- en Sterrenkundigen Week 3 Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/pmpy2015/

Deze week Voortbouwen op onze basiskennis Python Modules & Packages NumPy Matplotlib

Modules en packages Tot nu toe alleen programma's geschreven die bestonden uit een enkel bestand. Code kun je verspreiden over meerdere.pybestanden. Hoe roepen we een functie uit een ander.py-bestand aan?

import statement Een functie moet gedefinieerd zijn, voordat je deze in Python kunt aanroepen. Functies uit andere bestanden eerst importeren. We noemen dit soort andere bestanden "modules". Bundeling van modules: "package".

import statement (verv.) # importeer de gehele module, let op we laten ".py" weg! import handig handig.hallo() c = handig.telop(a, b) c = handig.vermenigvuldig(a, b)

import statement (verv.) # importeer een specifieke functie uit een module from handig import telop # We hoeven nu niet de prefix "handig." te gebruiken c = telop(a, b)

import statement (verv.) # importeer de gehele module, maar onder een afgekorte naam import handig as h h.hallo() c = h.telop(a, b)

Zelf modules maken Hoe maken we nu zelf een module? Maak een aparte.py-bestand met daarin functies. - Let op: gebruik geen streepjes of spaties in de bestandsnaam! Importeer het bestand met import.

Voorbeeld def hallo(): print "hello world" def telop(a, b): return a + b def vermenigvuldig(a, b): return a * b

NumPy introductie NumPy: Numerical Python. Wordt in heel veel takken van de wetenschap gebruikt voor numeriek rekenwerk. Belangrijkste onderdeel: multidimensionale array datastructuur.

NumPy import NumPy is een package en moeten we eerst importeren. import numpy as np

Intermezzo: ipython De interactieve Python prompt is handig, maar het kan nog veel beter. ipython: "turbocharged" interactief Python. Ideaal in combinatie met NumPy en matplotlib.

ipython features Je kan makkelijk voorgaande resultaten hergebruiken. Je kan ook ls, cat, cd, etc. gebruiken. Tab completion (!) Pylab mode.

De NumPy array Multidimensionale array zoals je ook in C++ hebt leren kennen. Aantal belangrijke verschillen ten opzichte van Python lijsten: - Aantal elementen staat na aanmaken vast. - Alle elementen zijn van hetzelfde type. - Gebruik van operatoren op NumPy arrays is wat je zou verwachten in tegenstelling tot Python lijsten (zie ook later).

NumPy arrays maken We beginnen met 1-dimensionale arrays. Bij het maken geven we het aantal elementen op. Verschillende manieren: - Creeren aan de hand van een Python list. - np.zeros: initialisatie met nullen. - np.ones: initialisatie met nullen. - np.tile: initialisatie met gespecificeerde waarde.

NumPy arrays maken (verv.) >>> np.array([1, 2, 3, 4, 5, 6]) array([1, 2, 3, 4, 5, 6]) >>> np.zeros(6) array([ 0., 0., 0., 0., 0., 0.]) >>> np.ones(6) array([ 1., 1., 1., 1., 1., 1.]) >>> np.tile(39., 6) array([ 39., 39., 39., 39., 39., 39.])

NumPy arrays maken (verv.) np.arange(start, stop, stap) : maak een getallen reeks. Mag ook floating-point gebruiken! np.linspace(begin, eind, N) : N getallen uit gesloten interval, gelijke afstand tussen de elementen.

NumPy arrays maken (verv.) >>> np.arange(0, 10, 2) array([0, 2, 4, 6, 8]) >>> np.linspace(1, 5, 10) array([ 1., 1.44444444, 2.77777778, 3.22222222, 3.66666667, ]) 1.88888889, 2.33333333, 4.11111111, 4.55555556, 5.

Eigenschappen van NumPy arrays >>> A = np.zeros(6) # 6 elementen, waarde nul. >>> A.ndim # Aantal dimensies. 1 >>> A.shape # De grootte van elke dimensie (zie ook later). (6,) >>> A.size # Het aantal elementen in de array. 6 >>> A.dtype # Het datatype van elk element (zie ook hieronder) dtype('float64')

Datatypen in NumPy float64? Die hebben we nog niet eerder gezien. NumPy kent vele extra datatypen waaruit kan worden gekozen om de data zo efficient mogelijk op te slaan. De belangrijkste: np.bool_, np.int32, np.float64, np.complex128.

Datatypen in NumPy Bij initialisatie probeert NumPy een geschikt datatype te kiezen. Soms is de gok niet wat je wilt, zelf opgeven met dtype=. >>> np.ones(10) array([ 1., 1., 1., 1., 1., 1., 1., 1., 1., 1.]) >>> np.ones(10, dtype=np.int32) array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1], dtype=int32)

Lijst vs. NumPy array Laten we eens gaan rekenen met een lijst. >>> l = [1, 2, 3, 4] >>> l * 4 [1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4] >>> l + 4 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can only concatenate list (not "int") to list >>> l * l Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: can't multiply sequence by non-int of type 'list'

Rekenen met NumPy arrays Python lijsten geven ons niet de resultaten die we zouden verwachten. Daarom: als je gaat rekenen, gebruik NumPy arrays! Operatoren werken elementgewijs.

Rekenen met NumPy arrays (verv.) >>> a = np.array([1, 2, 3, 4]) >>> a * 4 array([ 4, 8, 12, 16]) >>> a + 4 array([5, 6, 7, 8]) >>> a * a array([ 1, 4, 9, 16])

Rekenen met NumPy arrays (verv.) Toepassen formule op een getallenreeks. >>> x = np.arange(0, 10) >>> print x [0 1 2 3 4 5 6 7 8 9] >>> f1 = x ** 2 >>> f1 array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) >>> f2 = x ** 3 + 2 * x**2-3 >>> f2 array([ -3, 0, 13, 42, 93, 172, 285, 438, 637, 888])

Reductieoperatoren Een reductieoperator berekent 1 resultaat voor een gehele array. Voorbeelden: - Sommeren: np.sum() - Gemiddelde: np.mean() - Standaardeviatie: np.std() - Minimum: np.amin() - Maximum: np.amax()

Wiskundige functies Alle belangrijke wiskundige functies vind je terug in NumPy. Parameter mag natuurlijk zowel een scalair als array zijn. Voorbeelden: - np.log(), np.log10(), np.exp() - np.sin(), np.cos(), np.tan() - Let op: np.deg2rad(). - np.sqrt(), np.floor(), np.ceil() Constanten: np.pi, np.e. (Natuurkundige constanten: zie Scipy).

Slicing & indexing Indexing en slicing zoals je bent gewend. Toekenning aan een slice: Toekenning scalair: elk element in de slice krijgt deze waarde. Toekenning array: arrays moeten evenveel elementen bevatten!

Slicing & indexing (verv.) >>> A = np.arange(0, 10) >>> A[1:4] = 10 >>> print A [ 0 10 10 10 4 5 6 7 8 9] >>> A[8:] = [20, 21, 22, 23] # Reeks om toe te kennen groter dan slice Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: cannot copy sequence with size 4 to array axis with dimension 2 >>> A[8:] = [20, 21] >>> print A [ 0 10 10 10 4 5 6 7 20 21]

Multidimensionale arrays NumPy arrays kunnen een arbitrair aantal dimensies aan. Dimensies worden ook wel "assen" genoemd. Elke as heeft ene bepaalde lengte. Elke NumPy array heeft een "vorm" waarin de lengte van elke as is vastgelegd. - (3, ): 1 dimensie lengte 3. - (3, 4): 2 dimensies: 3 rijen, 4 kolommen. - (10, 3, 4): 3 dimensies: 10 vlakken, 3 rijen, 4 kolommen. (volgende week).

Multidimensionale arrays (verv.) Om te maken werken de gebruikelijke functies. In plaats van een aantal elementen vul je een shape tuple in. >>> >>> [[6 [6 [6 A = np.tile(6, (3, 4)) # 3 rijen, 4 kolommen print A 6 6 6] 6 6 6] 6 6 6]]

Identiteitsmatrices np.eye(n) maakt een n x n identiteitsmatrix. >>> I = np.eye(3) >>> print I [[ 1. 0. 0.] [ 0. 1. 0.] [ 0. 0. 1.]] # Een 3x3 identiteitsmatrix

Vanuit een geneste lijst >>> >>> [[1 [6 >>> (2, >>> >>> [[1 [6 C = np.array([[1, 2, 3], [6, 7, 4]]) print C 2 3] 7 4]] print C.shape 3) D = np.array(np.mat("1 2 3; 6 7 1")) print D 2 3] 7 1]]

Hoe zit dat met blokhaken? Het aantal blokhaken correspondeert met het aantal dimensies. [0 1 0] is iets anders dan [[0 1 0]], zie ook volgende week.

Arrays kopieren Pas op: een toekenning is geen kopieeractie!! >>> A = np.eye(3) >>> B = A # Kopieert niet, maar legt een extra referentie aan. >>> B[0,2] = 9 # Indexeren komen we later op >>> print A # A is dus ook aangepast! [[ 1. 0. 9.] [ 0. 1. 0.] [ 0. 0. 1.]] >>> B = np.copy(a) # De correcte manier om een kopie te maken.

Indexeren over meerdere dimensies Om een element aan te duiden in een multidimensionale array: geef per as (dimensie) een index op, gescheiden door komma's. B[0,2] B[1,2,3,4,5]

Slicing over meerdere dimensies In plaats van een index mag je natuurlijk ook een slice opgeven. De lege slice : selecteert de gehele as.

Slicing (verv.) >>> A[:,:] array([[ 0, 1, 2, 3, 4], [ 5, 6, 7, 8, 9], [10, 11, 12, 13, 14], [15, 16, 17, 18, 19]]) >>> A[2,1] # Selecteer een enkel element 11 >>> A[2,:] # Selecteer de derde rij. array([10, 11, 12, 13, 14]) >>> A[2] # Slices aan het einde mag je weglaten array([10, 11, 12, 13, 14]) >>> A[:,3] # Selecteer de vierde kolom array([ 3, 8, 13, 18])

Slicing (verv.) 0 1 2 3 4 0 1 2 3 4 5 6 7 8 9 5 6 7 8 9 10 11 12 13 14 10 11 12 13 14 15 16 17 18 19 15 16 17 18 19 A[:,::2] A[::3,::2]

Volgende week meer! Maar nu eerst: plotten.

matplotlib Matplotlib is een plotting "package" waarmee hoge kwaliteit plots kunnen worden gemaakt. Zeer veel mogelijkheden. Wordt gebruikt in combinatie met NumPy.

Een eerste plot import numpy as np import matplotlib.pyplot as plt # x # # y Bepaal de x-coordinaten die we willen plot. = np.arange(0, 10, 0.5) Bereken nu voor elk x-coordinaat de y-waarde Functie: y = 3x + 5 = 3 * x + 5 # Geef de x- en y-arrays als parameters aan de plot functie. plt.plot(x, y) # Zet de plot op het scherm plt.show() exit(0)

Kleuren en markers plt.plot() accepteert een groot aantal argumenten. color="red" marker="o" - punten markeren met cirkels. linewidth=2.5 - dikke lijn. linestyle="dotted" - stippellijn. label="mijn lijn" - komt in de legenda terecht.

Kleuren en markers (verv.) import numpy as np import matplotlib.pyplot as plt x = np.linspace(-2, 2, 25) y1 = 3 * x + 5 y2 = 5 * x ** 2-3 plt.plot(x, y1, color="blue", lw=1.0, linestyle="solid", marker=".") plt.plot(x, y2, color="red", lw=4.0, linestyle="dotted") plt.show() exit(0)

Kleuren en markers (verv.)

Titel & labels Zonder titel en aslabels is de plot natuurlijk niet af. plt.title("titel") : titel van de plot. plt.xlabel("label"), plt.ylabel("label") : aslabels. We mogen TeX gebruiken in matplotlib strings

Grid en assen Met plt.grid(true) kun je een achtergrond grid aanzetten. De intervallen van de assen kunnen op verschillende manieren worden ingesteld: - plt.ylim(-2, 10) en analoog voor plt.xlim(). - Of: plt.axis(xmin=0, xmax=20., ymin=-10, ymax=100.). plt.xscale("log") : geef de x-as een logaritmische schaal.

Legenda De opgegeven labels kunnen eenvoudig in een legenda worden afgebeeld. plt.legend(loc="upper right"). Je mag ook opgeven iets als center, lower left, etc.

Voorbeeld import numpy as np import matplotlib.pyplot as plt x = np.linspace(-2, 2, 25) y1 = 3 * x + 5 y2 = 5 * x ** 2-3 plt.plot(x, y1, color="blue", lw=1.0, linestyle="solid", marker=".", label="rechte lijn") plt.plot(x, y2, color="red", lw=4.0, linestyle="dotted", label="parabool") plt.title("mijn plot") plt.xlabel("x-as") plt.ylabel("y-as") plt.grid(true) plt.legend(loc="upper right") plt.show() exit(0)

Opslaan naar een bestand Om op te slaan als PDF bestand: vervang plt.show() met plt.savefig("hallo.pdf").

Meerdere plots maken Herhaalde aanroepen van plt.plot() tekenen in hetzelfde figuur. Hoe beginnen we nu een nieuw figuur? Functie: plt.figure().

Workflow 1) plt.figure(). 2) Een of meerdere aanroepen plt.plot(). 3) Plot opmaken door assen in te stellen, titel te zetten, enz. 4) plt.show() of plt.savefig(). 5) Optioneel: terug naar stap 1 voor de volgende plot.

Eindopracht Je weet nu genoeg om de gehele eindopdracht te maken. Met de kennis van volgende week kan je een aantal zaken nog wel mooier en handiger programmeren.

Volgende week Meer NumPy - Drie en meer dimensies - Meer array operaties - Random numbers Scatter plots & histogrammen Hoe meer leren over Python?

Morgen werkcollege 11:15-13:00 uur Snelliusgebouw: zalen 303-308 Aanwezigheidscontrole 1 verplichte opdracht voor 0.5 punt (laatste keer) Opgaven komen in de loop van vandaag online. Werk al aan de eindopdracht! Wacht niet tot volgende week!