teil xii wissenschaftliches rechnen in python...python t. neckel: einfuhrung¨ in die...
TRANSCRIPT
![Page 1: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/1.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Teil XII
Wissenschaftliches Rechnen inPython
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 294
![Page 2: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/2.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Nochmal Modul math
• Konstanten pi und e
• Funktionen fur int und float
• Alle Ruckgabewerte sind float
ceil(x)
floor(x)
exp(x)
fabs(x) # wie abs(), nur immer float
ldexp(x, i) # x * 2**i
log(x [,base])
log10(x) # == log(x, 10)
modf(x) # (Nachkommateil , Integerteil)
pow(x, y) # x**y
sqrt(x)
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 295
![Page 3: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/3.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Trigonometrische Funktionen (Bogenmaß)
cos(x); cosh(x); acos(x)
sin(x); ...
tan(x); ...
degrees(x) # rad -> deg
radians(x) # deg -> rad
inf/nan
float("inf")
float("-inf")
float("nan")
isinf(x) # Uberprufung auf Unendlichkeit
isnan(x) # Uberprufung auf NaN
Complexe Zahlen: cmath
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 296
![Page 4: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/4.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Und RICHTIGE Mathematik?
Bisherige Sequenztypen (list, tuple, . . . )• Konnen als Arrays verwendet werden• Konnen verschiedene beliebige Typen enthalten
• Sehr flexibel, aber auch langsam• Schleifen sind nicht sehr effizient
• Vektoren/Matrizen und Operationen auf diesen sind extremumstandlich
• Fur effizientes wissenschaftliches Rechnen sind andereDatentypen und Methoden notig
Module• NumPy• Matplotlib• SciPy
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 297
![Page 5: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/5.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Und RICHTIGE Mathematik?
Bisherige Sequenztypen (list, tuple, . . . )• Konnen als Arrays verwendet werden• Konnen verschiedene beliebige Typen enthalten
• Sehr flexibel, aber auch langsam• Schleifen sind nicht sehr effizient
• Vektoren/Matrizen und Operationen auf diesen sind extremumstandlich
• Fur effizientes wissenschaftliches Rechnen sind andereDatentypen und Methoden notig
Module• NumPy• Matplotlib• SciPy
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 297
![Page 6: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/6.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Modul numpy
Homogene Arrays• NumPy stellt beliebig-dimensionale Arrays bereit• Alle Elemente des Arrays haben den gleichen Typ• Beispiel
from numpy import *
a = array ([[1 ,2 ,3] ,[4 ,5 ,6]])
print a
type(a)
a.shape
print a[0,2]
a[0,2] = -1
b = a*2
print b
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 298
![Page 7: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/7.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Homogene Arrays (2)• Arrays konnen aus (verschachtelten) Sequenztypen erstellt
werden• Direkter Zugriff mit []
a = array ([1,2,3,4,5,6,7,8])
a[1]
a = array ([[1,2,3,4],[5,6,7,8]])
a[1,1]
a = array ([[[1 ,2] ,[3 ,4]] ,[[5 ,6] ,[7 ,8]]])
a[1,1,1]
• Eigenschaften von Arrays
a.ndim # Anzahl Dimensionen
a.shape # Anzahl Eintrage in jeder Dimension
a.size # Anzahl Elemente
a.dtype # Datentyp der Elemente
a.itemsize # Notige Anzahl Bytes fur den Datentyp
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 299
![Page 8: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/8.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Homogene Arrays (2)• Arrays konnen aus (verschachtelten) Sequenztypen erstellt
werden• Direkter Zugriff mit []
a = array ([1,2,3,4,5,6,7,8])
a[1]
a = array ([[1,2,3,4],[5,6,7,8]])
a[1,1]
a = array ([[[1 ,2] ,[3 ,4]] ,[[5 ,6] ,[7 ,8]]])
a[1,1,1]
• Eigenschaften von Arrays
a.ndim # Anzahl Dimensionen
a.shape # Anzahl Eintrage in jeder Dimension
a.size # Anzahl Elemente
a.dtype # Datentyp der Elemente
a.itemsize # Notige Anzahl Bytes fur den Datentyp
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 299
![Page 9: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/9.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Datentypen
• Exakte Typen (ahnlich C/C++) konnen angegeben werden• Ohne Angabe werden Standardtypen verwendet• Einige Typen (v.a. unterschiedlicher Speicherbedarf):
• int, int8, int16, int32, int64,• float, (float8, float16,) float32, float64,• complex, complex64,• bool, character, object
array ([[1,2,3],[4,5,6]], dtype=int)
array ([[1,2,3],[4,5,6]], dtype=complex)
array ([[1,2,3],[4,5,6]], dtype=int8) # ints in [ -128 ,127]
array ([[1 ,2 ,3] ,[4 ,5 ,1000]] , dtype=int8) # falsch!
array ([[1,2,3],[4,5,"hi"]], dtype=object)
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 300
![Page 10: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/10.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Arrays initialisieren• Standard-Matrizen (optionaler Parameter: dtype)
arange ([a,] b [,stride ]) # analog zu range , 1D
zeros( (3,4) )
ones( (1,3,4) )
empty( (3,4) ) # keine Init. (schnell)
linspace(a, b [, n]) # n aquid. Werte in [a,b]
logspace(a, b [, n]) # log zw. 10^a und 10^b
identity(n) # Identitat (Diagonalmat .)
fromfunction(lambda i,j: i+j, (3,4), dtype=int)
def f(i,j):
return i+j
fromfunction(f, (3,4), dtype=int)
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 301
![Page 11: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/11.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Arrays manipulieren
>>> a = arange (12); a
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> b = a.reshape ((3 ,4)); b; a
array ([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
>>> a.resize ((3 ,4)) # a wird verandert
>>> a.transpose () # a wird nicht verandert
>>> a.flatten () # a wird nicht verandert
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 302
![Page 12: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/12.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Noch mehr Manipulations- und Initialisierungsmethoden• Neue Matrizen aus existierenden Matrizen erstellen
a = arange (12); a.resize ((3 ,4))
copy(a)
diag(a); tril(a); triu(a)
empty_like(a) # Kopiert nur die Form
zeros_like(a)
ones_like(a)
a = loadtxt("matrix2.txt") # fromfile () (Binardatei)
• Matrizen ausgeben
a.tolist ()
savetxt("matrix3.txt", a) # tofile () (Binardatei)
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 303
![Page 13: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/13.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Lesen und Schreiben von Array-Elementen• Die von Listen bekannte Indizierung kann verwendet werden• Dimensionen werden mit Komma separiert
Hands-On: Was geben die folgenden print-Befehle aus?
a = array([ [1,2,3,4,5], [6,7,8,9,10], \
[11,12,13,14,15], [16 ,17 ,18 ,19 ,20]])
a[1]
a[1:3 ,:]
a[: ,::2]
a[::2 ,::2]
a[::2 ,::2] = [[0, -2, -4],[-10, -12, -14]]
a[1::2 ,1::2] = -1*a[1::2 ,1::2]
• Selektiver Zugriff
a[a > 9]
a[a > 9] *= -1
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 304
![Page 14: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/14.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Lesen und Schreiben von Array-Elementen• Die von Listen bekannte Indizierung kann verwendet werden• Dimensionen werden mit Komma separiert
Hands-On: Was geben die folgenden print-Befehle aus?
a = array([ [1,2,3,4,5], [6,7,8,9,10], \
[11,12,13,14,15], [16 ,17 ,18 ,19 ,20]])
a[1]
a[1:3 ,:]
a[: ,::2]
a[::2 ,::2]
a[::2 ,::2] = [[0, -2, -4],[-10, -12, -14]]
a[1::2 ,1::2] = -1*a[1::2 ,1::2]
• Selektiver Zugriff
a[a > 9]
a[a > 9] *= -1
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 304
![Page 15: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/15.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Uber Elemente von Matrizen iterieren
a = arange (20); a.resize ((4 ,5))
for row in a:
print row
b = arange (30); b.resize ((2,3,5))
for row in b:
for col in row:
print col
for entry in a.flat: # Iterator
print entry
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 305
![Page 16: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/16.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Rechnen mit Arrays• Schnelle built-in Methoden fur Arrays
a = arange (12); a.resize ((3 ,4))
3*a
a**2
sin(a)
sqrt(a)
prod(a)
sum(a)
it = transpose(a)
x = array ([1,2,3])
y = array ([10 ,20 ,30])
inner(x, y) # inner prod. (1D), od. inner prod.
# fur letzte "Achse" (N-D, N>1)
dot(it , x) # dot prod. (1D),
# aqu. zu Matrix -Mult. in 2D
cross(x,y) # Kreuzprodukt
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 306
![Page 17: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/17.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Rechnen mit Arrays
• Es gibt noch viel mehr. . .
var() cov() std()
mean() median ()
min() max()
tensordot ()
...
• Matrizen (mit mat) sind Unterklassen von ndarray, aber striktzweidimensional, mit zusatzlichen Attributen
m = mat(a)
m.T # Transponierte
m.A # Als 2d Array
m.H # Konjugiert Transponierte
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 307
![Page 18: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/18.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Untermodule
Modul numpy.random• Zufallszahlen aus vielen unterschiedlichen Verteilungen• Machtiger als das Standard-Modul random• Arbeitet auf Arrays und gibt Arrays zuruck
from numpy.random import *
binomial (10, 0.5) # 10 Versuche , Erfolg 50%
binomial (10, 0.5, 15) # 15 Mal voriges
binomial (10, 0.5, (3 ,4)) # (3x4) Array
randint(0, 10, 15) # [0,10), int
rand() # [0,1), float
rand (3,4) # (3x4) Array
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 308
![Page 19: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/19.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Untermodule (2)Modul numpy.linalg• Die wichtigsten Werkzeuge fur lineare Algebra
from numpy import *
from numpy.linalg import *
a = arange (16); a.resize ((4 ,4))
...
norm(a); norm(a,1) # Froben. und 1-norm
inv(a) # Inverse der Matrix
solve(a, b) # LAPACK LU Zerlegung
det(a) # Determinante
eig(a) # Eigenwerte und Eigenvektoren
cholesky(a) # Cholesky -Zerlegung
Modul numpy.fft• Fourier-Transformation
Und weitere . . .
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 309
![Page 20: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/20.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Untermodule (2)Modul numpy.linalg• Die wichtigsten Werkzeuge fur lineare Algebra
from numpy import *
from numpy.linalg import *
a = arange (16); a.resize ((4 ,4))
...
norm(a); norm(a,1) # Froben. und 1-norm
inv(a) # Inverse der Matrix
solve(a, b) # LAPACK LU Zerlegung
det(a) # Determinante
eig(a) # Eigenwerte und Eigenvektoren
cholesky(a) # Cholesky -Zerlegung
Modul numpy.fft• Fourier-Transformation
Und weitere . . .T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 309
![Page 21: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/21.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Version Mania
Aktuelle Situation
python
MatplotlibSciPy
NumPy
IPython
pylab
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 310
![Page 22: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/22.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Version Mania
Probleme:• Numpy, scipy, pylab, ipython und matplotlib werden oft
gleichzeitig benutzt• Die Pakete hangen voneinander ab (matplotlib benutzt z.B.
numpy-Arrays• Je nach Betriebssystem(sversion) mussen evtl. unterschiedliche
Pakete installiert werden (D.h. Der Modulname im import-Befehlkann auch unterschiedlich sein).
Vision: Alles in einem (neuen) Modul PyLab vereinigen!• gibt es als inoffizielles Paket• Achtung Name: wieder pylab!
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 311
![Page 23: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/23.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Matplotlib
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 312
![Page 24: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/24.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Matplotlib
Wozu Matplotlib?• Objektorientierte Bibliothek fur zweidimensionale plots• Entworfen mit den Ziel einer ahnlichen Funktionalitat wie Matlab
plots• Insbesondere zum Darstellen wissenschaftlicher Daten, baut auf
numpy-Datenstrukturen auf
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 313
![Page 25: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/25.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Moglichkeiten zum Importierenipython interaktiv
> ipython
import scipy , matplotlib.pylab
x = scipy.randn (10000)
matplotlib.pylab.hist(x, 100)
matplotlib.pylab.show()
> ipython
import numpy.random , matplotlib.pylab
x = numpy.random.randn (10000)
matplotlib.pylab.hist(x, 100)
matplotlib.pylab.show()
ipython mit pylab-Modus
> ipython --pylab
x = randn (10000)
hist(x, 100)T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 314
![Page 26: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/26.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel - Erster Plot
http://matplotlib.sourceforge.net/users/screenshots.html
from pylab import *
x = arange (0.0, 2*pi , 0.01)
y = sin(x)
plot(x, y)
xlabel(’Label fuer x-Achse ’)
ylabel(’Label fuer y-Achse ’)
title(’Einfacher sin plot’)
grid(True)
show()
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 315
![Page 27: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/27.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel - Subplots verwenden
from pylab import *
def f(t):
s1 = cos (2*pi*t)
e1 = exp(-t)
return multiply(s1,e1)
t1 = arange (0.0, 5.0, 0.1)
t2 = arange (0.0, 5.0, 0.02)
t3 = arange (0.0, 2.0, 0.01)
subplot (2,1,1) # Zeilen , Spalten , welche anzuzeigen
plot(t1, f(t1), ’go’, t2, f(t2), ’k--’)
subplot (2,1,2)
plot(t3, cos (2*pi*t3), ’r.’)
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 316
![Page 28: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/28.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel - Subplots verwenden
# Fortsetzung der vorigen Folie
subplot (2,1,1)
grid(True)
title(’A tale of 2 subplots ’)
ylabel(’Gedaempfte Oszillation ’)
subplot (2,1,2)
grid(True)
xlabel(’Zeit (s)’)
ylabel(’Ungedaempft ’)
show()
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 317
![Page 29: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/29.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel - Histogramm
from numpy import *
from matplotlib.mlab import *
from matplotlib.pyplot import *
mu, sigma = 100, 15
x = mu + sigma*random.randn (10000)
n, bins , patches = hist(x, 50, normed=1, \
facecolor=’green’, alpha =0.75)
# Linie mit ’best fit’ einzeichnen
y = normpdf( bins , mu , sigma)
plot(bins , y, ’r--’, linewidth =1)
axis ([40, 160, 0, 0.03])
show()
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 318
![Page 30: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/30.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
SciPy
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 319
![Page 31: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/31.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Mehr als NumPy?
• SciPy hangt von NumPy ab• SciPy arbeiten mit NumPy arrays• Stellt Funktionalitat fur Mathematik, Naturwissenschaft und
Ingenieursanwendungen zur Verfugung• Noch in Entwicklung• Bei NumPy geht es im Wesentlichen um (N-dimensionale)
Arrays.• SciPy stellt eine große Zahl an Werkzeugen zur Verfugung, die
diese Arrays verwenden.• SciPy beinhaltet die NumPy Funktionalitat (nur ein import notig).• Es gibt noch einige weitere Bibliothen fur wissenschaftliches
Rechnen (teilweise aufbauend auf NumPy und SciPy).• Hier daher nur eine kurze Ubersicht• Weitere Informationen auf www.scipy.org
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 320
![Page 32: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/32.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
SciPy - Unterpaketecluster Clustering Algorithmenconstants Physikalische und mathematische Konstantenfftpack Fast Fourier Transformationintegrate Integration und Loser fur gewohnliche DGLsinterpolate Interpolation und Splinesio Ein- und Ausgaberoutinenlinalg Lineare Algebramisc Verschiedenesndimage N-dimensionale Bildverarbeitungodr Orthogonal distance regressionoptimize Optimierung und Nullstellensuchesignal Signalverarbeitungsparse Dunne Matrizen und zugehorige Routinenspatial Raumliche Datenstrukturen und Algorithmenspecial Spezielle Funktionenstats Statistische Verteilungen und Funktionenweave Integration von C/C++ Programmen
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 321
![Page 33: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/33.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Spezielle Funktionen
• Airy-Funktion• Elliptische Integralfunktion• Bessel-Funktionen (+ Nullstellen, Integrale, Ableitungen,...)• Struve-Funktion• Jede Menge statistische Funktionen• Gamma-Funktion• Hypergeometrische Funktionen• Orthogonale Polynome (Legendre, Chebyshev, Jacobi,...)• Parabolische Zylinderfunktion• Mathieu-Funktion• Kelvin-Funktion• ...
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 322
![Page 34: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/34.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel: Interpolation - Linear
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = np.arange(0, 2.25*np.pi , np.pi/4)
y = np.sin(x)
f = interpolate.interp1d(x, y)
xnew = np.arange (0 ,2.25*np.pi, np.pi/4)
ynew = f(xnew)
plt.plot(x,y,’o’,xnew ,ynew ,’-’)
plt.title(’Lineare Interpolation ’)
plt.show()
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 323
![Page 35: Teil XII Wissenschaftliches Rechnen in Python...Python T. Neckel: Einfuhrung¨ in die wissenschaftliche Programmierung IN8008, Wintersemester 2015/2016 294 Scientic Computing in Computer](https://reader035.vdocuments.net/reader035/viewer/2022070220/613150181ecc51586944a82f/html5/thumbnails/35.jpg)
Scientific Computing in Computer Science, Technische Universitat Munchen
Beispiel: Interpolation - Kubische Splines
import numpy as np
import matplotlib.pyplot as plt
from scipy import interpolate
x = np.arange(0, 2.25*np.pi , np.pi/4)
y = np.sin(x)
spline = interpolate.splrep(x,y,s=0)
xnew = np.arange (0 ,2.02*np.pi,np.pi/50)
ynew = interpolate.splev(xnew , spline)
plt.plot(x,y,’o’,xnew ,ynew)
plt.legend ([’Interp -Punkte ’,’Kubischer Spline ’])
plt.axis ([ -0.05 ,6.33 , -1.05 ,1.05])
plt.title(’Interpolation mit kubischen Splines ’)
plt.show()
T. Neckel: Einfuhrung in die wissenschaftliche Programmierung
IN8008, Wintersemester 2015/2016 324