NumPy - Berthold Höllmann: Vorträge bei der Hamburger Python

Werbung
NumPy: Eine kleine Einführung
Authors:
Date:
Version:
Berthold Höllmann
2009-09-06 13:33:01 +0200 (So, 06 Sep 2009)
23
Inhalt
1 Paket für wissenschftl. Rechnen
2
2 Weitere Anwendungen
2
3 Quellen
2
4 Paketübersicht
4.1 Erläuterungen zu den Paketen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
3
5 Geschwindigkeit: Buildin Beispiel
3
6 Geschwindigkeit: NumPy Beispiel
3
7 Geschwindigkeit: Messung
3
8 Indizierung
4
9 Speicherlayout
4
10 Weitere Funktionen 1
5
11 Weitere Funktionen 2
5
12 Lineare Gleichungssysteme
5
13 Lineare Gleichungssysteme 2
5
14 Lineare Gleichungssysteme 3
5
15 Plotten
6
16 Plotten: Ergebnis
6
17 Plotten 2
6
18 Plotten 2: Ergebnis
7
19 Diskussion
7
1
1
Paket für wissenschftl. Rechnen
Das Zugrunde liegende Paket, das für wissenschaftliches Rechnen mit Python benötigt wird heißt NumPy. Dieses Paket enthält:
• Ein mächtiges, n-dimensionales Array Objekt
• Ausgereifte (überladene) Funktionen
• Grundlegende Funktionen zur Lösung Linearer Gleichungssysteme
• Grundlegende Funktionen zur Fourier Transformation
• Ausgereifte Zufallsgeneratoren
• Werkzeuge zur Integration von FORTRAN Code.
2
Weitere Anwendungen
Darüber hinaus kann NumPy als effizienter, mehrdimensionaler Container für generische Datentypen
verwendet werden.
Es können beliebige Datentypen definiert werden.
3
Quellen
1
NumPy: Homepage
Guide to NumPy: Trelgol Publishing
2
• Preis: $39.99
• Geschrieben von Travis E. Oliphant
• Market-Determined Temporary Distribution Restriction (MDTDR) model.
• World Price: $200.000; Frei erhältlich spätestens ab 30. Oktober 2010
3
NumPy Example List: Liste mit NumPy Beispielen
4
Paketübersicht
Paket
core
lib
linalg
fft
random
distutils
testing
f2py
Anwendung
Basisobjekte
Zusätzliche Werkzeuge
Einfache Lineare Algebra
Diskrete Fourier-Transformation
Zufallszahlen Generatoren
Erweitertes bauen und verteilen
Unit Testen
Automatisches einbinden von FORTRAN Code
2
4.1
Erläuterungen zu den Paketen
core: Alle Namen werden nach numpy exportiert
lib: Alle Namen werden nach numpy exportiert
linalg: Das alte LinearAlgebra aus Numeric
fft: Das alte FFT aus Numeric
random: Das alte RandomArray aus Numeric
distutils: Erweiterungen, aufsetzend auf dem Standard distutils Paket
testing: Funktionen Hilfreich zum Testen
f2py: Hilfreiches Dienstprogramm das von SciPy benötigt wird
5
Geschwindigkeit: Buildin Beispiel
samp1 buildin.py :
def test():
a = list(range(100000))
b = list(range(100000))
return [ A*B for A, B in zip(a, b) ]
c = test()
print c[2], c[4], c[999]
>>> import samp1_buildin
4 16 998001
6
Geschwindigkeit: NumPy Beispiel
samp1 numpy.py :
from numpy import *
def test():
a, b = arange(100000), arange(100000)
return a*b
c = test()
print c[2], c[4], c[999]
print take(c, [2, 4, 999])
>>> import samp1_numpy
4 16 998001
[
4
16 998001]
7
Geschwindigkeit: Messung
>>> import timeit
>>> t1 = timeit.Timer("samp1_buildin.test()")
>>> print "%.2f usec/pass" % (
...
t1.timeit(number=20)) # doctest: +SKIP
2.81 usec/pass
>>> t2 = timeit.Timer("samp1_numpy.test()")
>>> print "%.2f usec/pass" % (
...
t2.timeit(number=20)) # doctest: +SKIP
0.08 usec/pass
3
8
Indizierung
• Python bietet leistungfähige Indizierung
• NumPy nutzt diese voll aus, einige indizierungs Fähigkeiten in Python kommen aus Numeric
• Einige Beispiele:
– [:,3] liefert die vierte Zeile“ des Arrays. : liefert alle elemente Dimensionen.
”
>>> from numpy import *
>>> a = arange(60).reshape(3,4,5); print a
[[[ 0 1 2 3 4]
[ 5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]]
<BLANKLINE>
[[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]
[35 36 37 38 39]]
<BLANKLINE>
[[40 41 42 43 44]
[45 46 47 48 49]
[50 51 52 53 54]
[55 56 57 58 59]]]
– Ein weiterer Platzhalter is .... Er liefert alle passenden Dimensionen.
>>> print a[...,3]
[[ 3 8 13 18]
[23 28 33 38]
[43 48 53 58]]
>>> print a[1,...,3]
[23 28 33 38]
>>> print a[:,:,2]
[[ 2 7 12 17]
[22 27 32 37]
[42 47 52 57]]
>>> print a[0,::2,::2]
[[ 0 2 4]
[10 12 14]]
9
Speicherlayout
• Anordnung kontinuierlich und nicht kontinuierlich möglich.
• Kontinuierliche Anordnung entspricht C-Arrays
• Nichtkontinuierliche Anordung ist möglich:
– Arraygröße wird zur Laufzeit geändert
– Spalten / Zeilenlogik wird zwischen C und FORTRAN umgeschaltet.
• Viele Funktionen können nichtkontinuierliche Anordnung berücksichtigen, andernfalls werden die
Daten kopiert.
4
10
Weitere Funktionen 1
>>> a = empty(5, dtype=object); b= "test"
>>> print a
[None None None None None]
>>> a[:] = b
>>> print a, maximum.reduce(a)
[test test test test test] test
11
Weitere Funktionen 2
>>> a = eye(4)*(arange(4)+2.)
>>> print a, maximum.reduce(a)
[[ 2. 0. 0. 0.]
[ 0. 3. 0. 0.]
[ 0. 0. 4. 0.]
[ 0. 0. 0. 5.]] [ 2. 3. 4. 5.]
>>> print maximum.reduce(
...
maximum.reduce(a))
5.0
>>> a[0,-1] = 7
>>> print maximum.reduce(a)
[ 2. 3. 4. 7.]
>>> print maximum.reduce(a, axis=1)
[ 7. 3. 4. 5.]
12
Lineare Gleichungssysteme
>>> A = array(((0., 2., 0, 1.),
...
(2., 2., 3, 2.),
...
(4., -3., 0, 1.),
...
(6., 1., -6, -5.)))
>>> b = array((0, -2, -7, 6))
>>> import numpy.linalg as LA
>>> print LA.solve(A, b) #doctest: +NORMALIZE_WHITESPACE
[-0.5 1. 0.33333333 -2. ]
13
Lineare Gleichungssysteme 2
>>> b = transpose(array(((0, -2, -7, 6),
...
(0, 2, 7, -6))))
>>> x = LA.solve(A, b)
>>> print x
[[-0.5
0.5
]
[ 1.
-1.
]
[ 0.33333333 -0.33333333]
[-2.
2.
]]
14
Lineare Gleichungssysteme 3
>>> print dot(A, x) - b
5
[[ -8.88178420e-16
8.88178420e-16]
[ 1.33226763e-15 -1.33226763e-15]
[ 0.00000000e+00
0.00000000e+00]
[ 1.77635684e-15 -1.77635684e-15]]
>>> print allclose(dot(A, x), b)
True
15
Plotten
matplotlib4
>>>
>>>
>>>
>>>
>>>
x = arange(-2*pi, 2*pi, 0.2)
y = sin(x)
import pylab # matplotlib
lines = pylab.plot(x, y)
pylab.savefig(’sin.png’)
16
Plotten: Ergebnis
17
Plotten 2
>>>
>>>
>>>
>>>
>>>
p = subtract.outer(sin(x), cos(x))
lines = pylab.contourf(p)
pylab.savefig(’sincos.png’)
pylab.savefig(’sincos.eps’)
pylab.savefig(’sincos.svg’)
6
18
Plotten 2: Ergebnis
19
Diskussion
Fragen / Anmerkungen?
Links
Hamburger Python User Group • 2007/05/16
View document source. Generated on: 2009-09-28 13:14 UTC. Generated by Docutils from reStructuredText
source.
1
http://www.scipy.org/NumPy
2
http://www.tramy.us/
3
http://www.scipy.org/Numpy Example List
4
http://matplotlib.sourceforge.net/
7
Herunterladen