Python Script - Fakultät für Physik

Werbung
Vorlesung:
Computergestützte Datenauswertung
Programmierung mit Python
Günter Quast
Fakultät für Physik
Institut für Experimentelle Kernphysik
KIT – Universität des Landes Baden-Württemberg und
nationales Forschungszentrum in der Helmholtz-Gemeinschaft
SS16
www.kit.edu
PYTHON & friends
Literatur:
python für Anfänger:
(= numpy, scipy, matplotlib)
www.python­kurs.eu
offizielles python Tutorial:
http://docs.python.org/2/tutorial/
numpy tutorial:
http://wiki.scipy.org/Tentative_NumPy_Tutorial
numpy reference manual
http://docs.scipy.org/doc/numpy/reference/index.html
matplotlib tutorial:
http://matplotlib.org/users/pyplot_tutorial.html
advanced – for future python programmers:
http://www.diveintopython.net/
ipython shell, an advanced interactive shell
http://ipython.org/ipython-doc/stable/interactive/tutorial.html
python appetizer
http://docs.python.org/2/tutorial/
Die Python-Shell: ein interaktiver Taschenrechner
Aufruf durch Befehl
python
auf der Kommando-Zeile:
Beispiel
← multiple Zuweisung
← Kontrollstrukturen
Python interaktiv: weitere Beispiele
← Definition einer Funktion
Achtung:
Einrückungen zwingend
vorgeschrieben
← verschiedene Datenformate
← Typumwandlung nach float
geht nicht, weil Unsinn !
( abs(a) würde gehen - ausprobieren!)
noch mehr Beispiele
Funktion für Fibonacci-Zahlen
← Parameter mit Default und Name
for-Schleife
← klassische Schleife über Index
← Iteration über Liste
und noch ein Beispiel
mehr zu Listen
← Erzeugen
und Ausgabe einer Liste
← eine von vielen Funktionen
← komfortable Initialisierung
← Bereich aus Liste
← Filtern mit logischer Funktion
← Funktion auf alle Listenelemente
Anm.: geht mit numpy-arrays
auch einfacher
letztes Beispiel
dictionaries
← dictionary =
key-value-Paare
Python Scripte
Alles, was wir bisher gesehen haben, lässt sich auch in Form einer Text-Datei
als Python Script ausführen:
> python Fibonacci.py
Datei Fibonacci.py
#! /usr/bin/env python
#-- Fibonacci numbers as python script ------def Fibo(min=1, max=1000):
a,b=0,1
while b<max:
if b>=min: print b,
a,b=b,a+b
print '*==* Demo Script: Fibonacci numbers'
print '\n calling Fibo(max=10000)'
Fibo(max=10000)
print '\n calling Fibo(10000,1000000)'
Fibo(10000,1000000)
erlaubt Ausführung direkt aus
der Linux-Shell
Achtung: Datei muss
ausführbar sein:
> chmod a+x Fibonacci.py
Ausführung:
> ./Fibonacci.py
Python-Script (= Python-Programm)
erlaubt:
- Dokumentation
- Weiterentwicklung/Modifikation
- Wiederverwendung
- Weitergabe
von Code
NumPy für Vektoren und Matrizen
siehe
http://wiki.scipy.org/Tentative_NumPy_Tutorial
NumPy's
NumPy'smain
mainobject
objectisisthe
thehomogeneous
homogeneousmultidimensional
multidimensionalarray.
array.
ItItisisaatable
of
elements
(usually
numbers),
all
of
the
same
type,
table of elements (usually numbers), all of the same type,
indexed
indexed by
byaatuple
tupleof
ofpositive
positiveintegers.
integers.In
InNumpy
Numpydimensions
dimensionsare
are
called
axes.
The
number
of
axes
is
rank.
called axes. The number of axes is rank.
NumPy
NumPy ist ein fundamentales Paket zum wissenschaftlichen Rechnen in python
– zentrales Datenobjekt ist array zur Handhabung von Vektoren und
Matrizen aus homogenen Datentypen (im Gegensatz zu Listen!)
– viele trigonometrische, hyperbolische und andere spezielle Funktionen sind implementiert
– Rechenoperationen wirken auf ganze arrays,
hohe Verarbeitungsgeschwindigkeit durch compilierten Code
Beispiel:
>>> import numpy as np ← Einbinden von numpy als alias „np“
>>> a=np.array([1,2,3,4],'f')
>>> a
array([ 1., 2., 3., 4.], dtype=float32)
>>> b=np.array([0.5,1.,1.5,2.])
>>> b
array([ 0.5, 1. , 1.5, 2. ])
>>> b­a
← element-weise Subtraktion
array([­0.5, ­1. , ­1.5, ­2. ])
>>>
der • in python bedeutet:
np.array
verwende Objekt array aus Paket numpy (alias np)
( • auch um Methoden von Klassen anzusprechen)
Beispiele zu NumPy
>>> import numpy as np
>>> x = np.float32(1.0)
>>> x
1.0
>>> y = np.array([1,2,4],'int')
>>> y
array([1, 2, 4])
>>> z = np.arange(3, 'uint8')
>>> z
array([0, 1, 2], dtype=uint8)
numpy-arrays können mit
verschiedenen Datentypen
initialisiert werden allerdings enthält ein array
immer Elemente vom gleichen Typ
Datentypen: bool, int,int8,int16,int32
int64,uint8,uint16,uint32,uint64,
float,float16,float32,float64,
complex, complex64,complex128
>>> np.zeros(5)
← Initialisieren mit 0
array([ 0., 0., 0., 0., 0.])
>>> np.zeros((2,3))
← 2-dim array
array([[ 0., 0., 0.],
[ 0., 0., 0.]])
← Zahlen in Bereich mit Schrittweite
>>> np.arange(2, 3, 0.1)
array([ 2. , 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9])
>>> np.linspace(1., 4., 6)
← Zahlen in Bereich mit Anzahl,
array([ 1., 1.6, 2.2, 2.8, 3.4, 4. ])
obere Grenze enthalten
Zufall aus dem Computer
numpy erlaubt es auch, Arrays (also Vektoren und Matrizen) mit Zufallszahlen zu füllen:
gleichverteilte Zufallszahlen
>>> np.random.rand()
0.466210425430829
>>> np.random.rand()
0.3937425857019299
>>> np.random.rand() gleiche Funktion, aber
jedes mal eine andere Zahl !
0.8586162430715967
>>> np.random.rand()
0.31812462303570166
>>> np.random.rand(3)
array([ 0.43266661, 0.76177195, 0.60922989])
normal-verteilte Zufallszahlen
>>> np.random.randn()
0.5224185337307578
>>> np.random.randn()
1.8467581564176467
>>> np.random.randn(2)
array([-0.47682414, -0.59424037])
matplotlib für's Auge
siehe
http://www.matplotlib.org
matplotlib user guide: „ making plots should be easy!“
Einfaches Beispiel numpy & matplotlib
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
import numpy as np
import matplotlib.pyplot as plt
x=np.linspace(-20.,20.,200)
y=np.sin(x)/x
plt.plot(x,y)
plt.show()
matplotlib Grundlagen
matplotlib einfügen
import matplotlib.pyplot as plt
Balkendiagramm
h = [3., 5., 4., 2.]
x = [1., 2., 3., 4.]
plt.bar(x, y)
Grafik anzeigen
plt.show()
Häufigkeitsverteilung
Daten mit
Fehlerbalken
a = [1, 1, 2, 3, 3, 3, 4, 4]
plt.hist(a, 4)
x = [1., 2., 3., 4.]
y = [3., 5., 4., 2.]
e = 0.5
plt.errorbar(x, y, yerr=e, fmt='ro')
Noch nicht sehr schön, aber das kriegen wir noch ...
Falsche Daten
# Messdaten = Model + Messfehler
import numpy as np
import matplotlib.pyplot as plt
def model(x, a=1., b=0.5):
return a*x+b
numpy.random bietet Erzeugung von
Zufallszahlen
matplotlib
(.pyplot.errorbar)
erlaubt Darstellung
von Datenpunkten
mit Fehlerbalken
# generate fake data according to model
npoints, err =10, 1.3
xmin,xmax=1., 10.
xm=np.linspace(xmin,xmax,npoints)
← Erzeugung normalverteilter
dy=err*np.random.normal(size=npoints) ← Erzeugung von Zufallszahlen
Zufallszahlen
ym=model(xm)+dy
(normalverteilt)
# plot model
dx=(xmax-xmin)/10.
x=np.linspace(xmin-dx,xmax+dx,200)
plt.plot(x,model(x),'r-')
#plot fakde data
← Darstellung von Messplt.errorbar(xm,ym,yerr=err,fmt='bo') ←
Darstellung von Datenpunkten
plt.show() # display on screen
punkten mit Fehlern
mit Fehlerbalken
Häufigkeiten sichtbar: Histogramm
import numpy as np
import matplotlib.pyplot as plt
# generate random normal-distributed numbers
data=np.random.normal(size=100)
# plot data as historgram
plt.hist(data,50,normed=1)
plt.show() # put on screen
numpy.random bietet Erzeugung von
Zufallszahlen
matplotlib (.pyplot.hist)
bietet Erzeugung und
Darstellung von
Häufigkeitsverteilungen
← Häufigkeitsverteilung in
50 Intervallen
noch schöneres Bild
import numpy as np
import matplotlib.pyplot as plt
def fgauss(x,norm=1.,mu=0.,sigma=1.):
# define Gauss-function
return (norm*np.exp(-(x-mu)**2/2/sigma**2)/np.sqrt(2*np.pi)/sigma)
data=np.random.normal(size=100) # generate Gaussian random data
#plot function and data
x = np.arange(-4., 4., 0.1)
plt.plot(x, fgauss(x), 'r-')
plt.hist(data,50,normed=1)
#
make plot nicer:
plt.xlabel('x')
# add labels
plt.ylabel('probability density')
plt.title('Gauss distribution')
plt.figtext(0.6, 0.8 \
,r'$f(x) = N(\mu=0.,\sigma=1.)$'\
,fontsize=14, color='r') # nice formula
plt.grid(True)
# show a grid
plt.show()
# on screen
← mit LaTeX beschriftete
Grafik
höhere Mathematik: SciPy
SciPy
enthält viele weitere nützliche Pake
für das wissenschaftliche Rechnen
http://www.scipy.org
-- spezielle Funktionen
der mathematischen Physik
– Statistik
-- numerische Integration
-- numerische Optimierung
-- Interpolation
-- Signalverarbeitung (incl. FFT)
-- lineare Algebra
– ...
Es gibt noch viel zu entdecken !
Einfach ausprobieren ...
Beste Methode: Beispiele
– analysieren,
– für eigene Zwecke anpassen,
– weiterentwickeln.
Herunterladen