close

Anmelden

Neues Passwort anfordern?

Anmeldung mit OpenID

Eine ( sehr ) kurze Einführung in die Programmierung - Mathematik

EinbettenHerunterladen
Eine (sehr) kurze Einf¨uhrung in die Programmierung
mit python, numpy und scipy
Heinz Zorn
Universit¨
at Trier
28./29. Oktober 2014
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
1 / 40
¨
Ubersicht
Python (python.org)
Python ist eine universelle, u
¨blicherweise interpretierte h¨ohere
Programmiersprache.
Python ist f¨
ur die meisten g¨angigen Betriebssysteme frei erh¨altlich.
NumPy (www.numpy.org)
NumPy ist eine Python Erweiterung f¨
ur effizientes wissenschaftliches
Rechnen.
NumPy umfasst unter anderem
Datenstruktur f¨
ur mehrdimensionale Felder (Vektoren, Matrizen,
Tensoren...)
mathematische Funktionen zu deren Manipulation
Schnittstellen zu den Programmiersprachen C/C++ und Fortran
SciPy (www.scipy.org)
Erweitert Python aufbauend auf NumPy um Module f¨
ur die numerische
Optimierung, lineare Algebra, numerische Integration, Interpolation,
numerische Integration gew¨
ohnlicher Differentialgleichungen,
symbolische Mathematik uvm.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
1 / 40
Installation
Es gibt zahlreiche Programmpakete zur Installation der genannten
Pakete auf einen Schlag inkusive diverser Entwicklungsumgebungen.
Hier gew¨ahlte Entwicklungsumgebung: Spyder
(code.google.com/p/spyderlib/)
Installation in vielen Linux Distributionen u
¨ber die Paketverwaltung
m¨oglich
Installation auf Mac z.B. durch Installation von Anaconda
(http://continuum.io/downloads)
Installation unter Windows z.B. durch Installation von Python(x,y)
(z.B. http://www.mirrorservice.org/sites/pythonxy.com/Python(x,y)2.7.6.1.exe)
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
2 / 40
Spyder-Benutzeroberfl¨ache
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
3 / 40
Spyder-Benutzeroberfl¨ache
Informationsfenster
Skript Editor
Python Interpreter
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
3 / 40
Spyder-Benutzeroberfl¨ache
Python Interpreter: Programmierung im interaktiven Modus
Skript Editor: Anzeigen und Bearbeiten von Skripten
Skripte werden mit F5 ausgef¨
uhrt
Informationsfenster
Object Inpector: zeigt Informationen aus der Dokumentation an
Variable Explorer: zeigt aktuell vergebene Variablen und deren Inhalt an
File Explorer: Durchsuchen des Verzeichnisbaumes
(Rechtsklick im File Explorer um neuen Python Interpreter im aktuellen
Verzeichnis zu ¨
offnen)
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
4 / 40
Python-Programmierung allgemein
offizielles Python-Tutorial: docs.python.org/2/tutorial/
Programmieren ist im interaktiven Modus oder in Skripten m¨oglich
Python ist eine Interpreter-Sprache
oft nicht besonders effizient
laufzeitkritische Programmteile werden besser als vorkompilierte (z.B.
C++) Module eingebunden (z.B. NumPy und SciPy)
Die Dokumentation zu Funktionen kann mit help(<funktionsname>)
im Python Interpreter abgefragt werden.
Python erm¨oglicht eine sehr gut lesbare und kompakte
Programmierung
der Programmierer wird gezwungen vern¨
unftig einzur¨
ucken
keine Variablendeklaration notwendig
Programmbl¨
ocke werden nicht durch Klammern gruppiert
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
5 / 40
Interaktiver Modus
Ausdr¨
ucke k¨onnen im Interpreter eingegeben werden und werden nach
Best¨atigung mit Enter sofort ausgewertet und das Resultat
ausgegeben
>>> (3+5∗∗2−8/4)%5
1.0
Ergebnis kann einer Variable ohne vorherige Deklaration zugewiesen
werden
>>> a = 3−2
>>> a
1
Benutzen einer nicht definierten Variable verursacht einen Fehler
>>> a + b
T r a c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e ”< s t d i n >”, l i n e 1 , i n <module>
NameError : name ’ b ’ i s n o t d e f i n e d
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
6 / 40
Skalare Datentypen
Python konvertiert skalare Gr¨
oßen bei Bedarf selbstst¨andig
>>> 3 − 2
1
>>> 2/2
1.0
Konvertierung kann explizit vorgenommen werden
>>> f l o a t ( 1 )
1.0
>>> i n t ( 3 / 2 )
1
>>> co m p l e x ( 3 , 1 )
(3+1 j )
>>> f l o a t ((0+1 j ) ∗ ∗ 2 )
T r a c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e ”< s t d i n >”, l i n e 1 , i n <module>
T y p e E r r o r : can ’ t c o n v e r t c o m p l e x t o f l o a t
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
7 / 40
Strings
Zeichenketten k¨onnen mit einfachen oder doppelten
Anf¨
uhrungszeichen eingegeben werden
>>> ’ Py ’
’ Py ’
>>> ” t h o n ”
’ thon ’
>>> ”Py” ’ thon ’
’ Python ’
>>>
+ ” ’ rockt ’ ! ”
” Python ’ r o c k t ’ ! ”
Auf einzelne Zeichen oder Teilfolgen kann mit eckigen Klammern
zugegriffen werden
>>> s = ’ 1 2 3 4 5 6 7 8 9 ’
>>> s [ 0 ] + s [ −1] + s [ 3 : 7 ]
’194567 ’
>>> s [ 4 : ] + s [ : 4 ]
’567891234 ’
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
8 / 40
Listen
Beliebige Objekte k¨onnen in Listen gespeichert werden.
>>> b u c h s t a b e n = [ ’ a ’ , ’ b ’ , ’ c ’ , ’ d ’ ]
>>> z a h l e n = [ 1 , 2 . 0 , 3+0 j ]
>>> b u c h s t a b e n + z a h l e n
[ ’ a ’ , ’ b ’ , ’ c ’ , ’ d ’ , 1 , 2 . 0 , (3+0 j ) ]
>>> [ − 1 : 0 : − 2 ] ∗ 3
[(3+0 j ) , 1 , ’ c ’ , (3+0 j ) , 1 , ’ c ’ , (3+0 j ) , 1 , ’ c ’ ]
Im Gegensatz zu Strings k¨
onnen Listen ver¨andert werden
>>> a = ’ a ’ ∗ 3
>>> b = [ ’ b ’ ] ∗ 3
>>> [ a , b ]
[ ’ aaa ’ , [ ’ b ’ , ’ b ’ , ’ b ’ ] ]
>>> b [ 0 ] = a [ 0 ]
>>> b
[ ’ a ’ , ’b ’ , ’b ’ ]
>>> a [ 1 ] = b [ 1 ]
T r a c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e ”< s t d i n >”, l i n e 1 , i n <module>
TypeError : ’ s t r ’ o b j e c t does not support item assignment
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
9 / 40
Tupel
Tupel sind nicht ver¨anderbare Listen und werden mit runden
Klammern oder oder durch Kommas getrennt erzeugt.
>>> ( 1 , 2 , 3 )
(1 , 2 , 3)
>>> , 4 , ’ 5 ’ , [ 6 ]
((1 , 2 , 3) , 4 , ’5 ’ , [ 6 ] )
>>> t =
>>> t [ 1 ] = 4 . 0
T r a c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e ”< s t d i n >”, l i n e 1 , i n <module>
TypeError : ’ tuple ’ o b j e c t does not support item assignme
>>> t [ − 1 ] [ 0 ] = 6 . 0
>>> t
((1 , 2 , 3) , 4 , ’5 ’ , [ 6 . 0 ] )
>>> a , b = 1 , 2
>>> b
2
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
10 / 40
Kontrollstrukturen: if, elif, else
Ein Block von Anweisungen wird ausgef¨
uhrt, falls eine Bedingung
erf¨
ullt ist.
Typische Bedingungen werden durch Vergleiche angegeben.
>>> x = 5
>>> i f x % 2 == 0 :
...
p r i n t x , ’ i s t gerade ’
. . . else :
...
p r i n t x , ’ i s t ungerade ’
...
5 i s t ungerade
Bei allen Kontrollstrukturen m¨
ussen die Anweisungsbl¨ocke einger¨
uckt
werden!
>>> i f True :
. . . p r i n t ’ w i r d immer a u s g e f u e h r t ’
F i l e ”< s t d i n >”, l i n e 2
p r i n t ’ w i r d immer a u s g e f u e h r t ’
ˆ
I n d e n t a t i o n E r r o r : e x p e c t e d an i n d e n t e d b l o c k
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
11 / 40
Kontrollstrukturen: if, elif, else
Auch sequenzielle Strukturen k¨
onnen miteinander verglichen werden.
>>>
...
...
...
...
...
...
...
...
...
...
4
i f (2 , 2 , 3) < (1 , 2 , 3 ) :
print 1
e l i f (1 , 2 , 3) < (1 , 2 ) :
print 2
e l i f (1 ,) < ’2 ’:
print 3
e l i f [2] < (1 ,):
print 4
else :
print 5
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
12 / 40
Kontrollstrukturen: while-Schleife
Ein Anweisungsblock wird so lange wiederholt, wie eine Bedingung
erf¨
ullt ist.
>>> i = 0
>>> w h i l e i <
...
print
...
i = i
...
0 1 2 3 4 5 6
10:
i ,
+ 1
7 8 9
Einzelne Durchl¨aufe k¨
onnen mit continue und die ganze Schleife mit
break beendet werden.
>>> i = 0
>>> w h i l e True :
...
i = i +1
...
i f i %2 == 0 :
...
continue
...
i f i == 9 :
...
break
...
print i ,
...
1 3 5 7
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
13 / 40
Kontrollstrukturen: for-Schleife
Ein Anweisungsblock wird f¨
ur jeden Eintrag einer Sequenz ausgef¨
uhrt.
>>> l = [ ’ Katzen ’ , ’ f r e s s e n ’ , ’ Mause ’ ]
>>> f o r word i n l :
...
p r i n t word ,
...
Katzen f r e s s e n Mause
>>> f o r i i n r a n g e (2 , −1 , −1):
...
print l [ i ] ,
...
Mause f r e s s e n Katzen
Auch hier sind Endlosschleifen m¨
oglich.
>>>
[0 ,
>>>
...
...
...
...
...
0 1
range (10)
1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9]
for i in
:
. append ( i +10)
print i ,
i f i == 2 0 :
break
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
14 / 40
Eigene Funktionen
Funktionsdefinitionen beginnen mit dem Schl¨
usselwort def, gefolgt
von einem Funktionsnamen und einer Klammer mit den zu
u
¨bergebenden Parametern.
Der Funktionsk¨orper muss einger¨
uckt werden.
>>> d e f s a g ( was ) :
...
p r i n t was ,
...
>>> s a g ( ’ H a l l o Welt ! ’ )
H a l l o Welt !
>>> d e f countdown ( n ) :
...
sag ( n )
...
i f n > 0:
...
countdown ( n−1)
...
>>> countdown ( 1 0 )
10 9 8 7 6 5 4 3 2 1 0
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
15 / 40
Eigene Funktionen
Funktionen k¨onnen einen oder mehrere R¨
uckgabewerte haben.
Mehrere R¨
uckgabewerte werden als Tupel zur¨
uckgegeben.
>>> d e f p o t e n z ( b a s i s , e x p o n e n t ) :
...
r e t u r n b a s i s ∗∗ e x p o n e n t
...
>>> p o t e n z ( 2 , 3 )
8
>>> d e f minmax ( l i s t e ) :
...
r e t u r n min ( l i s t e ) , max ( l i s t e )
...
>>> minmax ( [ 3 , −1, 7 , 2 , 0 ] )
( −1 , 7 )
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
16 / 40
G¨ultigkeitsbereich von Variablen
Funktionen haben ihre eigene Symboltabelle mit Variablen.
Beim Schreiben von Variablen in einer Funktion wird eine neue lokale
Variable angelegt. innerhalb der Funktion mit global deklariert werden.
>>>
1
>>>
...
...
...
>>>
123
>>>
1
a
def funktion ( ) :
a = ’123 ’
print a
funktion ()
a
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
17 / 40
G¨ultigkeitsbereich von Variablen
Globale Variablen von außerhalb einer Funktion k¨onnen innerhalb
einer Funktion gelesen werden.
Um globale Variablen aus einer Funktion heraus zu u
¨berschreiben
muss diese vor der ersten Verwendung innerhalb der Funktion mit
global deklariert werden.
>>>
>>>
...
...
...
...
>>>
1
>>>
3
b, c = 1, 2
def funktion2 ( ) :
print b,
global c
c = 3
funktion2 ()
c
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
18 / 40
Module
Alles bisher besprochene kann nicht nur im interaktiven Modus,
sondern auch in Skripten, sogenannten Modulen angewendet werden.
Mit dem Befehl import k¨
onnen Module im interaktiven Modus der
auch in anderen Modulen verf¨
ugbar gemacht werden.
Module werden in Dateien mit dem Namen modulname.py
gespeichert.
Funktionen aus einem Modul werden nach dem Import mit
modulname.funktionsname aufgerufen.
# Modul m i t dem Namen e i g e n e f u n k t i o n
# i n D a t e i e i g e n e f u n k t i o n . py
d e f s a g ( was ) :
p r i n t was
>>> i m p o r t e i g e n e f u n k t i o n
>>> e i g e n e f u n k t i o n . s a g ( ’ Modul ’ )
Modul
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
19 / 40
Module
Die in einem Modul verf¨
ugbaren Funktionen und Variablen lassen sich
u
¨ber die Funktion dir(modulname) abfragen.
>>> d i r ( e i g e n e f u n k t i o n )
[ ’ builtins
’ , ’ doc ’ , ’ f i l e
’ n a m e ’ , ’ p a c k a g e ’ , ’ sag ’ ]
’,
Alle standardm¨aßig in Python enthaltenen Funktionen und Variablen
werden mit dir( builtin ) angezeigt.
>>> d i r ( b u i l t i n s )
[ ’ ArithmeticError ’ , ’ AssertionError ’ , ’ AttributeError ’ ,
’ B a s e E x c e p t i o n ’ , ’ B u f f e r E r r o r ’ , ’ BytesWarning ’ ,
’ D e p r e c a t i o n W a r n i n g ’ , ’ EOFError ’ , ’ E l l i p s i s ’ ,
’ EnvironmentError ’ , ’ Exception ’ , ’ False ’ ,
’ F l o a t i n g P o i n t E r r o r ’ , ’ FutureWarning ’ , ’ G e n e r a t o r E x i t ’ ,
’ I O E r r o r ’ , ’ I m p o r t E r r o r ’ , ’ ImportWarning ’ ,
’ I n d e n t a t i o n E r r o r ’ , ’ IndexError ’ , ’ KeyError ’ ,
’ K e y b o a r d I n t e r r u p t ’ , ’ L o o k u p E r r o r ’ , ’ MemoryError ’ ,
’ NameError ’ , ’ None ’ , ’ NotImplemented ’ ,
’ N o t I m p l e m e n t e d E r r o r ’ , ’ OSError ’ , ’ O v e r f l o w E r r o r ’ ,
( Ausgabe a b g e s c h n i t t e n )
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
20 / 40
Module
Alle Definitionsaufrufe und Anweisungen eines Moduls werden beim
Importieren ausgef¨
uhrt.
# e i n m o d u l . py
print ’ Hallo ! ’
>>> i m p o r t e i n m o d u l
Hallo !
Module k¨onnen aus der Kommandozeile des Betriebssystems
(=Python-Interpreter) mit dem Aufruf python modulname.py
ausgef¨
uhrt werden.
u s e r @ u b u n t u : ˜ / Python$ p y t h o n e i n m o d u l . py
Hallo !
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
21 / 40
Module
Um zwischen der selbsst¨andigen Ausf¨
uhrung und dem Import eines
Moduls zu unterscheiden, kann die Variable name verwendet
werden.
# n o c h e i n m o d u l . py
p r i n t ’ Mein Name i s t ’ ,
if
name
name
== ’ m a i n ’ :
print ’ Ich bin selbstbestimmt ! ’
>>> i m p o r t n o c h e i n m o d u l
Mein Name i s t n o c h e i n m o d u l
u s e r @ u b u n t u : ˜ / Python$ p y t h o n n o c h e i n m o d u l . py
Mein Name i s t
main
Ich bin selbstbestimmt !
Jedes Modul kann nur einmal normal importiert werden. Erneutes
laden eines Moduls erfolgt mit reload(modulname).
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
22 / 40
NumPy Array
Der zentrale Datentyp in NumPy ist numpy.ndarray mit dem Alias
numpy.array.
Arrays k¨onnen beispielsweise aus Listen oder Tupeln erzeugt werden.
>>> i m p o r t numpy a s np
>>> A = np . a r r a y ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] ] )
>>> A
array ([[1 , 2 , 3] ,
[4 , 5 , 6]])
>>> p r i n t A
[ [ 1 2 3]
[4 5 6 ] ]
Einige wichtige Eigenschaften von NumPy Arrays
>>> A . ndim , A . shape , A . s i z e , A . d t y p e
(2 , (2 , 3) , 6 , dtype ( ’ int64 ’ ) )
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
23 / 40
NumPy Datentypen
Eintr¨age in NumPy Arrays haben im Gegensatz zu denen von Python
Listen alle denselben Datentyp.
>>> from numpy i m p o r t a r r a y
>>> A = a r r a y ( [ True , 1 ] )
>>> A
array ([1 , 1])
>>> A [ 1 ] = 2 . 5
>>> A
array ([1 , 2])
¨
¨
Andern
des Datentyps kann zu Uberraschungen
f¨
uhren.
>>> A = a r r a y ( [ 1 . ,
0.])
>>> A . d t y p e = ’ i n t ’
>>> A
a r r a y ([4607182418800017408 ,
>>> A = a r r a y ( [ 1 . , 0 ] )
>>> a r r a y (A , d t y p e =’ i n t ’ )
array ([1 , 0])
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
0])
28./29. Oktober 2014
24 / 40
NumPy Datentypen
NumPy bietet neben den g¨angigen Datentypen bool, int, float und
complex zahlreiche Varianten mit unterschiedlichem Speicherbedarf
an.
>>> d t y p e ( ’ b o o l ’ ) . i t e m s i z e , d t y p e ( ’ i n t ’ ) . i t e m s i z e
(1 , 8)
>>> d t y p e ( ’ f l o a t ’ ) . i t e m s i z e , d t y p e ( ’ complex ’ ) . i t e m s i z e
(8 , 16)
>>> A = a r r a y ( [ [ 1 , 2 ] , [ 3 , 4 ] ] )
>>> A
array ([[1 , 2] ,
[3 , 4]])
>>> A . d t y p e = ’ i n t 3 2 ’
>>> A
array ([[1 , 0 , 2 , 0] ,
[ 3 , 0 , 4 , 0 ] ] , d t y p e=i n t 3 2 )
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
25 / 40
Rechenoperationen auf Arrays
Rechenoperationen auf NumPy Arrays werden elementweise
ausgef¨
uhrt - auch die Multiplikation!
Bei nicht passenden Dimensionen wird versucht das kleinere Array zu
vergr¨oßern.
>>> A = a r a n g e ( 6 ) . r e s h a p e ( 2 , 3 )
>>> A
array ([[0 , 1 , 2] ,
[3 , 4 , 5]])
>>> p r i n t 2∗A
[ [ 0 2 4]
[ 6 8 10]]
>>> p r i n t A+1
[ [ 1 2 3]
[4 5 6 ] ]
>>> p r i n t A+a r r a y ( [ 1 , 2 , 3 ] )
[ [ 1 3 5]
[4 6 8 ] ]
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
26 / 40
Rechenoperationen auf Arrays
Rechenoperationen auf NumPy Arrays werden elementweise
ausgef¨
uhrt - auch die Multiplikation!
Bei nicht passenden Dimensionen wird versucht das kleinere Array zu
vergr¨oßern.
>>> A
array ([[0 , 1 , 2] ,
[3 , 4 , 5]])
>>> B = A + a r r a y ( [ [ 1 ] , [ 0 ] ] )
>>> B
array ([[1 , 2 , 3] ,
[3 , 4 , 5]])
>>> A∗B
array ( [ [ 0 , 2 , 6] ,
[ 9 , 16 , 2 5 ] ] )
>>> A∗ a r r a y ( [ 1 , 2 ] )
T r a c e b a c k ( most r e c e n t c a l l l a s t ) :
F i l e ”< s t d i n >”, l i n e 1 , i n <module>
V a l u e E r r o r : o p e r a n d s c o u l d n o t be b r o a d c a s t t o g e t h e r
with shapes (2 ,3) (2)
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
27 / 40
Rechenoperationen auf Arrays
Es gibt die Datenstruktur numpy.matrix, die die gewohnte
Matrixmultiplikation mit * erm¨
oglicht.
Diverse mathematische Operationen sind bereits in NumPy enthalten.
>>> A = a r a n g e ( 6 ) . r e s h a p e ( 2 , 3 )
>>> B = A . t r a n s p o s e ( )
>>> np . m a t r i x (A) ∗ np . m a t r i x (B)
matrix ( [ [ 5 , 14] ,
[14 , 50]])
>>> C = a r r a y ( )
>>> np . l i n a l g . i n v (C)
a r r a y ( [ [ 0.92592593 , −0.25925926] ,
[ −0.25925926 , 0 . 0 9 2 5 9 2 5 9 ] ] )
>>> from numpy . l i n a l g i m p o r t ∗
>>> d o t ( , C)
array ( [ [
1 . 0 0 0 0 0 0 0 0 e +00 , −7.77156117 e −16] ,
[ 0 . 0 0 0 0 0 0 0 0 e +00 ,
1.00000000 e +00]])
>>> s o l v e ( [ [ 1 , 2 ] , [ −1 , 1 ] ] , [ 8 , 1 ] )
array ([ 2. ,
3.])
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
28 / 40
NumPy Arrays erzeugen und manipulieren
>>> o n e s ( 3 )
array ([ 1. , 1. ,
1.])
>>> z e r o s ( ( 2 , 2 ) , d t y p e =’ i n t ’ )
array ([[0 , 0] ,
[0 , 0]])
>>> e y e ( 3 )
array ( [ [ 1. , 0. ,
0.] ,
[ 0. , 1. ,
0.] ,
[ 0. , 0. ,
1.]])
>>> A =
>>> A [ 1 : 3 , 0 : 2 ] = 2∗ o n e s ( ( 2 , 2 ) )
>>> A
array ( [ [ 1. , 0. ,
0.] ,
[ 2. , 2. ,
0.] ,
[ 2. , 2. ,
1.]])
>>> A . r e s h a p e ( 1 , 9 )
array ( [ [ 1. , 0. , 0. , 2. , 2. ,
>>> e y e ( 4 ) [ 1 ]
array ([ 0. , 1. , 0. ,
0.])
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
0. ,
2. ,
2. ,
1.]])
28./29. Oktober 2014
29 / 40
SciPy
SciPy is a collection of mathematical algorithms and convenience
functions built on the Numpy extension of Python. It adds significant
power to the interactive Python session by providing the user with
high-level commands and classes for manipulating and visualizing
data. With SciPy an interactive Python session becomes a
data-processing and system-prototyping environment rivaling sytems
such as MATLAB, IDL, Octave, R-Lab, and SciLab. (www.scipy.org)
Konvention zum Importieren von SciPy
>>>
>>>
>>>
>>>
import
import
import
import
numpy a s np
s c i p y as sp
m a t p l o t l i b a s mpl
m a t p l o t l i b . pyplot as p l t
¨
Beim Offnen
von Spyder werden diese Module bereits importiert.
I m p o r t e d NumPy 1 . 6 . 1 , S c i P y 0 . 1 2 . 0 , M a t p l o t l i b 1 . 1 . 1 r c
Type ” s c i e n t i f i c ” f o r more d e t a i l s .
>>> sp
<module ’ s c i p y ’ from ’ / u s r / l i b / p y t h o n 2 . 7 / d i s t −p a c k a g e s /
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
30 / 40
SciPy
Die eigentliche Funktionalit¨at von SciPy ist in Unterpaketen
implementiert die explizit importiert werden m¨
ussen.
Alle Unterpakete k¨onnen mit sp.info(sp) angezeigt werden.
>>> sp . i n f o ( s p )
S c i P y : A s c i e n t i f i c c o m p u t i n g p a c k a g e f o r Python
================================================
...
Subpackages
−−−−−−−−−−−
...
linalg
−−− L i n e a r a l g e b r a r o u t i n e s
misc
−−− V a r i o u s u t i l i t i e s t h a t don ’ t ha ve
a n o t h e r home .
ndimage
−−− n−d i m e n s i o n a l image p a c k a g e
odr
−−− O r t h o g o n a l D i s t a n c e R e g r e s s i o n
optimize
−−− O p t i m i z a t i o n T o o l s
signal
−−− S i g n a l P r o c e s s i n g T o o l s
sparse
−−− S p a r s e M a t r i c e s
...
>>> from s c i p y i m p o r t o p t i m i z e
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
31 / 40
SciPy
Ein Beispiel f¨
ur die Funktion fsolve aus dem Unterpaket
scipy.optimize:
>>> sp . i n f o ( o p t i m i z e . f s o l v e )
f s o l v e ( f u n c , x0 , a r g s =() , f p r i m e=None , f u l l o u t p u t =0,
c o l d e r i v =0, x t o l =1.49012 e −08 , maxfev =0,
band=None , e p s f c n=None , f a c t o r =100 , d i a g=None )
Find the r o o t s of a f u n c t i o n .
R e t u r n t h e r o o t s o f t h e ( non− l i n e a r ) e q u a t i o n s d e f i n e d
by ‘ ‘ f u n c ( x ) = 0 ‘ ‘ g i v e n a s t a r t i n g e s t i m a t e .
Parameters
−−−−−−−−−−
func : c a l l a b l e ‘ ‘ f (x , ∗ args ) ‘ ‘
A f u n c t i o n t h a t t a k e s a t l e a s t one argument .
x0 : n d a r r a y
The s t a r t i n g e s t i m a t e f o r t h e r o o t s o f f u n c ( x ) = 0
args : tuple , optional
Any e x t r a a r g u m e n t s t o ‘ f u n c ‘ .
....
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
32 / 40
SciPy
Ein Beispiel f¨
ur die Funktion fsolve aus dem Unterpaket
scipy.optimize:
>>> d e f f ( x , a =1, b =1):
...
r e t u r n a ∗ s i n ( x ) + b∗ c o s ( x )
...
>>> f ( 1 ) , f ( 1 , 2 , 3 )
(1.3817732906760363 , 3.3038488872202123)
>>> o p t i m i z e . f s o l v e ( f , 1 )
array ([ 5.49778714])
>>> o p t i m i z e . f s o l v e ( f , 1 , ( 2 , 3 ) )
array ([ 2.15879893])
>>> o p t i m i z e . f s o l v e ( f , 1 , ( 1 , 1 ) )
array ([ 5.49778714])
>>> f ( )
a r r a y ( [ −3.33066907 e −16])
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
33 / 40
Matplotlib und Pyplot
Matplotlib ist eine Programmbibliothek f¨
ur die Programmiersprache
Python, die es erlaubt mathematische Darstellungen aller Art zu
erstellen.
Pyplot ist eine Sammlung von Funktionen die die Benutzung von
Matplotlib mit MATLAB-¨ahnlichem Syntax erm¨
oglicht.
>>> d e f f ( x , a =1, b =1):
...
r e t u r n a ∗ s i n ( x ) + b∗ c o s ( x )
...
>>> x = l i n s p a c e ( 0 , 2∗ p i , 1 0 0 )
>>> y = f ( x )
>>> p l t . p l o t ( x , y , ’ gx ’ )
[< m a t p l o t l i b . l i n e s . Line2D o b j e c t a t 0 x2b5eb90 >]
>>> p l t . p l o t ( x , y , ’ gx ’ , x , f ( x , 2 , 3 ) , ’ r − ’)
[< m a t p l o t l i b . l i n e s . Line2D o b j e c t a t 0 x 7 f 9 d 0 8 0 4 9 6 9 0 >,
< m a t p l o t l i b . l i n e s . Line2D o b j e c t a t 0 x2b62dd0 >]
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
34 / 40
Matplotlib und Pyplot
Matplotlib ist eine Programmbibliothek f¨
ur die Programmiersprache
Python, die es erlaubt mathematische Darstellungen aller Art zu
erstellen.
Pyplot ist eine Sammlung von Funktionen die die Benutzung von
Matplotlib mit MATLAB-¨ahnlichem Syntax erm¨
oglicht.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
35 / 40
Programmierstil-Richtlinien
Der Standard f¨
ur Python-Programmierung ist in PEP 8 definiert
(python.org/dev/peps/pep-0008/).
Einhaltung der Richtlinien erleichtern die Lesbarkeit des Quellcodes
f¨
ur den Programmierer und vor allem f¨
ur andere.
Die Richtlinien enthalten Standards unter anderem zu Strukturierung
des Quelltexts (Einr¨
ucken und Verwendung von Leerzeichen und
Leerzeilen), Kommentierung des Quelltexts (Kommentare und
Dokumentation) und Namensgabe (f¨
ur Module, Variablen,
Funktionen...).
Verst¨oße gegen die Richtlinien aus PEP 8 k¨
onne zu Punktabz¨
ugen in
den Programmieraufgaben f¨
uhren.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
36 / 40
Kommentare und Dokumentation
Ein Kommentar wird in Python mit # begonnen. Aller Quelltext der
in einer Zeile auf ein # folgt wird nicht ausgef¨
uhrt.
Kommentare sollten in einer eigenen Zeile stehen und den darauf
folgenden Programmblock kommentieren.
Auf das # am Beginn eines Kommentars sollte stets ein Leerzeichen
folgen.
In mehrzeilige Kommentare muss jede Zeile mit # beginnen und alle
Zeilen sollten gleich einger¨
uckt sein.
Dokumentation des Quelltext erfolgt in docstrings. Docstrings werden
durch drei doppelte Anf¨
uhrungszeichen am Anfang und Ende
eingeschlossen.
Docstrings k¨onnen sich u
¨ber mehrere Zeilen erstrecken.
Docstrings von Funktionen und Modulen werden mit der
help(funktionsname/modulname) angezeigt.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
37 / 40
Kommentare und Dokumentation
””” D o k u m e n t i e r t e s Modul um Kommentare zu e r l a e u t e r n ”””
# Funktion d i e nur H a l l o sagt
def hallo ( ) :
””” D i e s e F u n k t i o n s a g t i h r e m A u f r u f e r h a l l o . ” ” ”
p r i n t ” H a l l o ! ” # i n l i n e −Kommentare s i n d m e i s t u n n o e t i g
>>> i m p o r t d o k u m e n t i e r t e s m o d u l a s dm
>>> h e l p (dm)
Help on module d o k u m e n t i e r t e s m o d u l :
NAME
d o k u m e n t i e r t e s m o d u l − D o k u m e n t i e r t e s Modul um Kommenta
FILE
/home/ z o r n / Programmierung /pythonNumDGL/ d o k u m e n t i e r t e s m
FUNCTIONS
hallo ()
Diese Funktion sagt ihrem A u f r u f e r h a l l o .
>>> h e l p (dm . h a l l o )
Help on f u n c t i o n h a l l o i n module d o k u m e n t i e r t e s m o d u l :
hallo ()
Diese Funktion sagt ihrem A u f r u f e r h a l l o .
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
38 / 40
Strukturierung von Python-Quelltext
Zum Einr¨
ucken sollten stets vier Leerzeichen verwendet werden.
Die Zeilenl¨ange sollte 79 Zeichen nicht u
¨berschreiten. Folgezeilen
sollten sinnvoll an der ersten Zeile ausgerichtet werden.
Funktionen und Klassen sollten durch zwei Leerzeilen getrennt
werden, sonstige inhaltliche Bl¨
ocke durch eine Leerzeile.
Operatoren sollten stets von Leerzeichen umschlossen sein. Auf
Kommas und Semikola sollte stets ein Leerzeichen folgen.
Unmittelbar nach einer ¨
offnenden und vor einer schließenden Klammer
sollte kein Leerzeichen stehen.
Zwischen Funktionsname und der Klammer mit den Argumenten
sollte kein Leerzeichen stehen.
Außer zum Einr¨
ucken sollten niemals mehrere Leerzeichen am St¨
uck
verwendet werden.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
39 / 40
Namenskonventionen
O, l und I sollten nicht als Variablen verwendet werden.
Paket-, Modulnamen sollten nur aus Kleinbuchstaben bestehen.
Worte k¨onnen durch getrennt werden.
Variabel- und Funktionsnamen k¨
onnen zus¨atzlich Ziffern enthalten.
Konstanten sollten aus Großbuchstaben und ggf.
bestehen.
Klassennamen (hier nicht behandelt) sollten dem CamelCase-Schema
folgen.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
40 / 40
Namenskonventionen
O, l und I sollten nicht als Variablen verwendet werden.
Paket-, Modulnamen sollten nur aus Kleinbuchstaben bestehen.
Worte k¨onnen durch getrennt werden.
Variabel- und Funktionsnamen k¨
onnen zus¨atzlich Ziffern enthalten.
Konstanten sollten aus Großbuchstaben und ggf.
bestehen.
Klassennamen (hier nicht behandelt) sollten dem CamelCase-Schema
folgen.
Vielen Dank f¨ur die Aufmerksamkeit.
Heinz Zorn (Universit¨
at Trier)
Python-Einf¨
uhrung
28./29. Oktober 2014
40 / 40
Document
Kategorie
Technik
Seitenansichten
8
Dateigröße
314 KB
Tags
1/--Seiten
melden