Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort...

100
Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: Einführung in die Programmierung Die Module numpy und matplotlib Herbst 2019 – 21. November 2019

Transcript of Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort...

Page 1: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Hans-Joachim Böckenhauer und Dennis Komm

Digitale Medizin I: Einführung in die ProgrammierungDie Module numpy und matplotlib

Herbst 2019 – 21. November 2019

Page 2: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren 2Komplexität des Sortierens

Page 3: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Komplexität des Sortierens

Wie ändert sich die Laufzeit bei bestimmten Eingaben?

Vorsortiert

Absteigend sortiert

Zufällig

Die Anzahl Vergleiche ist bei Mergesort(und auch Bubble- und Minsort) immer gleich für ein festes n

Das ist nicht immer so

Unterschiedlicher Best-, Worst- und Average-Case

Timsort nutzt z. B. vorsortierte Teilarrays aus

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 1 / 24

Page 4: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Komplexität des Sortierens

Wie ändert sich die Laufzeit bei bestimmten Eingaben?

Vorsortiert

Absteigend sortiert

Zufällig

Die Anzahl Vergleiche ist bei Mergesort(und auch Bubble- und Minsort) immer gleich für ein festes n

Das ist nicht immer so

Unterschiedlicher Best-, Worst- und Average-Case

Timsort nutzt z. B. vorsortierte Teilarrays aus

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 1 / 24

Page 5: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Komplexität des Sortierens

Wie ändert sich die Laufzeit bei bestimmten Eingaben?

Vorsortiert

Absteigend sortiert

Zufällig

Die Anzahl Vergleiche ist bei Mergesort(und auch Bubble- und Minsort) immer gleich für ein festes n

Das ist nicht immer so

Unterschiedlicher Best-, Worst- und Average-Case

Timsort nutzt z. B. vorsortierte Teilarrays aus

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 1 / 24

Page 6: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Komplexität des Sortierens

Wie ändert sich die Laufzeit bei bestimmten Eingaben?

Vorsortiert

Absteigend sortiert

Zufällig

Die Anzahl Vergleiche ist bei Mergesort(und auch Bubble- und Minsort) immer gleich für ein festes n

Das ist nicht immer so

Unterschiedlicher Best-, Worst- und Average-Case

Timsort nutzt z. B. vorsortierte Teilarrays aus

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 1 / 24

Page 7: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Komplexität des Sortierens

Wie ändert sich die Laufzeit bei bestimmten Eingaben?

Vorsortiert

Absteigend sortiert

Zufällig

Die Anzahl Vergleiche ist bei Mergesort(und auch Bubble- und Minsort) immer gleich für ein festes n

Das ist nicht immer so

Unterschiedlicher Best-, Worst- und Average-Case

Timsort nutzt z. B. vorsortierte Teilarrays aus

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 1 / 24

Page 8: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren 2Bucketsort

Page 9: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren weniger Elemente

Sortieren komplexer Datensätze nach einem Attribut

Stabiles Sortieren: Daten mit gleichem Attribut haben gleiche Reihenfolge

Beispiel

Name Vorname Note

Adleman Leonard 6Caesar Gaius Julius 3de Vigenère Blaise 5Rivest Ronald 6Shamir Adi 6

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 2 / 24

Page 10: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren weniger Elemente

Sortieren komplexer Datensätze nach einem Attribut

Stabiles Sortieren: Daten mit gleichem Attribut haben gleiche Reihenfolge

Beispiel

Name Vorname Note

Adleman Leonard 6Caesar Gaius Julius 3de Vigenère Blaise 5Rivest Ronald 6Shamir Adi 6

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 2 / 24

Page 11: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren weniger Elemente

Sortieren komplexer Datensätze nach einem Attribut

Stabiles Sortieren: Daten mit gleichem Attribut haben gleiche Reihenfolge

Beispiel

Name Vorname Note

Adleman Leonard 6Caesar Gaius Julius 3de Vigenère Blaise 5Rivest Ronald 6Shamir Adi 6

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 2 / 24

Page 12: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 13: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 14: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a

2b 1c 1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a

2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 15: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b

1c 1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 16: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c

1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 17: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d

2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 18: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e

3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 19: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f

1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 20: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g

3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 21: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 22: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a 2b1c 1d 2e 3f1g

3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 23: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a 2b1c 1d 2e

3f

1g

3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 24: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a 2b1c 1d

2e 3f

1g

3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 25: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a

2b

1c 1d

2e 3f

1g

3h

1a

2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 26: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a

2b

1c 1d

2e 3f1g 3h

1a

2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 27: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a

2b

1c

1d 2e 3f1g 3h

1a

2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 28: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h1a

2b1c 1d 2e 3f1g 3h

1a

2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 29: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

1a 2b 1c 1d 2e 3f 1g 3h

1a 2b1c 1d 2e 3f1g 3h

1a 2b

1c

1d

2e

3f

1g

3h

......

...

1 2 3Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 3 / 24

Page 30: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Aufgabe – Bucketsort

Implementieren Sie Bucketsort

als Python-Funktion

mit drei Stacks one, two und threefür die möglichen Werte 1, 2 und 3

der die Stacks entsprechend dergegebenen Liste füllt

und die Stacks am Endezusammenfügt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 4 / 24

Page 31: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

def bucketsort(data):one = []two = []three = []for item in data:

if item == 1:one.append(item)

else:if item == 2:

two.append(item)else:

if item == 3:three.append(item)

return one + two + three

if item == 1:one.append(item)

elif item == 2:two.append(item)

elif item == 3:three.append(item)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 5 / 24

Page 32: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Bucketsort

def bucketsort(data):one = []two = []three = []for item in data:

if item == 1:one.append(item)

else:if item == 2:

two.append(item)else:

if item == 3:three.append(item)

return one + two + three

if item == 1:one.append(item)

elif item == 2:two.append(item)

elif item == 3:three.append(item)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 5 / 24

Page 33: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Sortieren 2Zeitkomplexität von Bucketsort

Page 34: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

Sei n die Länge der Eingabe

Sei k die Anzahl unterschiedlicher Werte

Beim Füllen der Buckets max. k − 1 Vergleiche pro Element

ï Gesamtanzahl Vergleiche: ungefähr k · n

Die Laufzeit von Bucketsort ist in O(n), wenn eine konstante Anzahl vonWerten existiert

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 6 / 24

Page 35: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

Sei n die Länge der Eingabe

Sei k die Anzahl unterschiedlicher Werte

Beim Füllen der Buckets max. k − 1 Vergleiche pro Element

ï Gesamtanzahl Vergleiche: ungefähr k · n

Die Laufzeit von Bucketsort ist in O(n), wenn eine konstante Anzahl vonWerten existiert

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 6 / 24

Page 36: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

Sei n die Länge der Eingabe

Sei k die Anzahl unterschiedlicher Werte

Beim Füllen der Buckets max. k − 1 Vergleiche pro Element

ï Gesamtanzahl Vergleiche: ungefähr k · n

Die Laufzeit von Bucketsort ist in O(n), wenn eine konstante Anzahl vonWerten existiert

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 6 / 24

Page 37: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

Sei n die Länge der Eingabe

Sei k die Anzahl unterschiedlicher Werte

Beim Füllen der Buckets max. k − 1 Vergleiche pro Element

ï Gesamtanzahl Vergleiche: ungefähr k · n

Die Laufzeit von Bucketsort ist in O(n), wenn eine konstante Anzahl vonWerten existiert

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 6 / 24

Page 38: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

10 20 30 40 50 60 70 80 90 100

0

1,000

2,000

3,000

4,000

5,000

Bubblesort / Minsort

Eingabelänge n

Verg

leic

he

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 7 / 24

Page 39: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

10 20 30 40 50 60 70 80 90 100

0

1,000

2,000

3,000

4,000

5,000

Bubblesort / Minsort

Mergesort

Eingabelänge n

Verg

leic

he

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 7 / 24

Page 40: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zeitkomplexität von Bucketsort

10 20 30 40 50 60 70 80 90 100

0

1,000

2,000

3,000

4,000

5,000

Bubblesort / Minsort

Mergesort

Bucketsort (k = 3)

Eingabelänge n

Verg

leic

he

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 7 / 24

Page 41: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

ListenWeiterführende Konzepte

Page 42: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Listen

Bislang

Initialisieren einer Liste: x = [] oder x = [1, 4, 8]

Initialisieren einer Liste mit zehn Nullen: x = [0] * 10

Elemente anhängen: x.append(3)

Listen zusammenfügen: x = x + y oder x = x + [5, 7, 9]

Auf erstes Element zugreifen (und löschen): z = x.pop(0)

Auf letztes Element zugreifen (und löschen): z = x.pop()

Auf i-tes Element zugreifen: z = x[i]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 8 / 24

Page 43: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Listen

Bislang

Initialisieren einer Liste: x = [] oder x = [1, 4, 8]

Initialisieren einer Liste mit zehn Nullen: x = [0] * 10

Elemente anhängen: x.append(3)

Listen zusammenfügen: x = x + y oder x = x + [5, 7, 9]

Auf erstes Element zugreifen (und löschen): z = x.pop(0)

Auf letztes Element zugreifen (und löschen): z = x.pop()

Auf i-tes Element zugreifen: z = x[i]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 8 / 24

Page 44: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Listen

Bislang

Initialisieren einer Liste: x = [] oder x = [1, 4, 8]

Initialisieren einer Liste mit zehn Nullen: x = [0] * 10

Elemente anhängen: x.append(3)

Listen zusammenfügen: x = x + y oder x = x + [5, 7, 9]

Auf erstes Element zugreifen (und löschen): z = x.pop(0)

Auf letztes Element zugreifen (und löschen): z = x.pop()

Auf i-tes Element zugreifen: z = x[i]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 8 / 24

Page 45: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

Jetzt: List Comprehensions zum Initialisieren. . .

einer Liste mit den ersten zehn natürlichen Zahlen:x = [i for i in range(0, 10)]

einer Liste mit den ersten zehn geraden natürlichen Zahlen:

x = [i for i in range(0, 20, 2)]

einer Liste mit den Quadraten der ersten zehn natürlichen Zahlen:

x = [i * i for i in range(0, 10)]

einer Liste mit den Quadraten von [8, 19, 71, 101]:

x = [i * i for i in [8, 19, 71, 101]]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 9 / 24

Page 46: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

Jetzt: List Comprehensions zum Initialisieren. . .

einer Liste mit den ersten zehn natürlichen Zahlen:x = [i for i in range(0, 10)]

einer Liste mit den ersten zehn geraden natürlichen Zahlen:

x = [i for i in range(0, 20, 2)]

einer Liste mit den Quadraten der ersten zehn natürlichen Zahlen:

x = [i * i for i in range(0, 10)]

einer Liste mit den Quadraten von [8, 19, 71, 101]:

x = [i * i for i in [8, 19, 71, 101]]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 9 / 24

Page 47: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

Jetzt: List Comprehensions zum Initialisieren. . .

einer Liste mit den ersten zehn natürlichen Zahlen:x = [i for i in range(0, 10)]

einer Liste mit den ersten zehn geraden natürlichen Zahlen:

x = [i for i in range(0, 20, 2)]

einer Liste mit den Quadraten der ersten zehn natürlichen Zahlen:

x = [i * i for i in range(0, 10)]

einer Liste mit den Quadraten von [8, 19, 71, 101]:

x = [i * i for i in [8, 19, 71, 101]]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 9 / 24

Page 48: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

Jetzt: List Comprehensions zum Initialisieren. . .

einer Liste mit den ersten zehn natürlichen Zahlen:x = [i for i in range(0, 10)]

einer Liste mit den ersten zehn geraden natürlichen Zahlen:

x = [i for i in range(0, 20, 2)]

einer Liste mit den Quadraten der ersten zehn natürlichen Zahlen:

x = [i * i for i in range(0, 10)]

einer Liste mit den Quadraten von [8, 19, 71, 101]:

x = [i * i for i in [8, 19, 71, 101]]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 9 / 24

Page 49: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

Jetzt: List Comprehensions zum Initialisieren. . .

einer Liste mit den ersten zehn natürlichen Zahlen:x = [i for i in range(0, 10)]

einer Liste mit den ersten zehn geraden natürlichen Zahlen:

x = [i for i in range(0, 20, 2)]

einer Liste mit den Quadraten der ersten zehn natürlichen Zahlen:

x = [i * i for i in range(0, 10)]

einer Liste mit den Quadraten von [8, 19, 71, 101]:

x = [i * i for i in [8, 19, 71, 101]]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 9 / 24

Page 50: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

[ 〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 ]

[ 〈Ausdruck abhängig von Variable i〉 for i in range(. . . ) ]

Filter[〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 if 〈Bedingung〉 ]

Liste aller Zahlen aus [8, 60, 3, 19, 21], die grösser als 8 sind:x = [i for i in [8, 60, 3, 19, 21] if i > 8]

Liste aller Zahlen aus [9, 6, 10, 19], die durch 5 teilbar sind:y = [9, 6, 10, 19]x = [i for i in y if i % 5 == 0]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 10 / 24

Page 51: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

[ 〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 ]

[ 〈Ausdruck abhängig von Variable i〉 for i in range(. . . ) ]

Filter[〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 if 〈Bedingung〉 ]

Liste aller Zahlen aus [8, 60, 3, 19, 21], die grösser als 8 sind:x = [i for i in [8, 60, 3, 19, 21] if i > 8]

Liste aller Zahlen aus [9, 6, 10, 19], die durch 5 teilbar sind:y = [9, 6, 10, 19]x = [i for i in y if i % 5 == 0]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 10 / 24

Page 52: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

[ 〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 ]

[ 〈Ausdruck abhängig von Variable i〉 for i in range(. . . ) ]

Filter[〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 if 〈Bedingung〉 ]

Liste aller Zahlen aus [8, 60, 3, 19, 21], die grösser als 8 sind:x = [i for i in [8, 60, 3, 19, 21] if i > 8]

Liste aller Zahlen aus [9, 6, 10, 19], die durch 5 teilbar sind:y = [9, 6, 10, 19]x = [i for i in y if i % 5 == 0]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 10 / 24

Page 53: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

[ 〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 ]

[ 〈Ausdruck abhängig von Variable i〉 for i in range(. . . ) ]

Filter[〈Ausdruck abhängig von Variable i〉 for i in 〈Liste〉 if 〈Bedingung〉 ]

Liste aller Zahlen aus [8, 60, 3, 19, 21], die grösser als 8 sind:x = [i for i in [8, 60, 3, 19, 21] if i > 8]

Liste aller Zahlen aus [9, 6, 10, 19], die durch 5 teilbar sind:y = [9, 6, 10, 19]x = [i for i in y if i % 5 == 0]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 10 / 24

Page 54: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Aufgabe – List Comprehensions

Initialisieren Sie eine Liste, die

alle Primzahlen zwischen 1 und 1000beinhaltet

dazu die Funktion primetest undList Comprehensions verwendet

[〈Ausdruck abhängig von Variable i〉 for i in range(. . . ) if 〈Bedingung〉]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 11 / 24

Page 55: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

List Comprehensions

from math import sqrt

def primetest(x):if x < 2 or (x > 2 and x % 2 == 0):

return Falsed = 3while d <= sqrt(x):

if x % d == 0:return False

d += 2return True

y = [i for i in range(1001) if primetest(i)]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 12 / 24

Page 56: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zugriff auf Elemente

Auf 0-tes Element zugreifen: x[0]

Auf letztes Element zugreifen: x[len(x) - 1]

Auf letztes Element zugreifen: x[-1]

Auf Teilliste von Positionen 4 bis 9 zugreifen: z = x[4:10]

Auf Teilliste ab Position 5 zugreifen: z = x[5:]

Auf Teilliste bis Position 3 zugreifen: z = x[:4]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 13 / 24

Page 57: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zugriff auf Elemente

Auf 0-tes Element zugreifen: x[0]

Auf letztes Element zugreifen: x[len(x) - 1]

Auf letztes Element zugreifen: x[-1]

Auf Teilliste von Positionen 4 bis 9 zugreifen: z = x[4:10]

Auf Teilliste ab Position 5 zugreifen: z = x[5:]

Auf Teilliste bis Position 3 zugreifen: z = x[:4]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 13 / 24

Page 58: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Zugriff auf Elemente

Auf 0-tes Element zugreifen: x[0]

Auf letztes Element zugreifen: x[len(x) - 1]

Auf letztes Element zugreifen: x[-1]

Auf Teilliste von Positionen 4 bis 9 zugreifen: z = x[4:10]

Auf Teilliste ab Position 5 zugreifen: z = x[5:]

Auf Teilliste bis Position 3 zugreifen: z = x[:4]

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 13 / 24

Page 59: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Namespaces

Page 60: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Namespaces

Bisher

Eigene Module einbinden / existierende Module einbinden

Wurzel-Funktion aus mathfrom math import sqrt

from math import *

Problem, wenn verschiedene Module gleiche Funktionsnamen verwenden

Verwende Namespaces

Dies gibt Inhalt des Moduls eindeutigen Namenimport math as mymath

print(mymath.sqrt(9))

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 14 / 24

Page 61: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Namespaces

Bisher

Eigene Module einbinden / existierende Module einbinden

Wurzel-Funktion aus mathfrom math import sqrt

from math import *

Problem, wenn verschiedene Module gleiche Funktionsnamen verwenden

Verwende Namespaces

Dies gibt Inhalt des Moduls eindeutigen Namenimport math as mymath

print(mymath.sqrt(9))

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 14 / 24

Page 62: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Die Module numpy und matplotlib

Page 63: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

numpy und matplotlib

Zwei Module werden oft in der Wissenschaft verwendetnumpy und matplotlibSie erlauben ähnliche Funktionalität wie MATLAB

numpy

Rechnungen mit Vektoren und MatrizenNumerische MethodenDokumentation: https://numpy.org/doc/

matplotlib

Datenvisualisierung (Plots)Dokumentation: https://matplotlib.org/contents.html

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 15 / 24

Page 64: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

numpy und matplotlib

Zwei Module werden oft in der Wissenschaft verwendetnumpy und matplotlibSie erlauben ähnliche Funktionalität wie MATLAB

numpy

Rechnungen mit Vektoren und MatrizenNumerische MethodenDokumentation: https://numpy.org/doc/

matplotlib

Datenvisualisierung (Plots)Dokumentation: https://matplotlib.org/contents.html

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 15 / 24

Page 65: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

numpy und matplotlib

Zwei Module werden oft in der Wissenschaft verwendetnumpy und matplotlibSie erlauben ähnliche Funktionalität wie MATLAB

numpy

Rechnungen mit Vektoren und MatrizenNumerische MethodenDokumentation: https://numpy.org/doc/

matplotlib

Datenvisualisierung (Plots)Dokumentation: https://matplotlib.org/contents.html

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 15 / 24

Page 66: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

Page 67: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

numpy ist Grundlage für viele weitere wissenschaftliche Module

Fokus auf effizienter Verarbeitung von grossen Vektoren und Matrizen

Es besitzt eigene Datenstrukturen, z. B. numpy-Arrays

Diese funktionieren ähnlich wie Python-Listen

numpy-Arrays sind schneller

numpy-Arrays erlauben mehr Operationen

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 16 / 24

Page 68: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

numpy ist Grundlage für viele weitere wissenschaftliche Module

Fokus auf effizienter Verarbeitung von grossen Vektoren und Matrizen

Es besitzt eigene Datenstrukturen, z. B. numpy-Arrays

Diese funktionieren ähnlich wie Python-Listen

numpy-Arrays sind schneller

numpy-Arrays erlauben mehr Operationen

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 16 / 24

Page 69: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

numpy ist Grundlage für viele weitere wissenschaftliche Module

Fokus auf effizienter Verarbeitung von grossen Vektoren und Matrizen

Es besitzt eigene Datenstrukturen, z. B. numpy-Arrays

Diese funktionieren ähnlich wie Python-Listen

numpy-Arrays sind schneller

numpy-Arrays erlauben mehr Operationen

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 16 / 24

Page 70: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

numpy ist Grundlage für viele weitere wissenschaftliche Module

Fokus auf effizienter Verarbeitung von grossen Vektoren und Matrizen

Es besitzt eigene Datenstrukturen, z. B. numpy-Arrays

Diese funktionieren ähnlich wie Python-Listen

numpy-Arrays sind schneller

numpy-Arrays erlauben mehr Operationen

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 16 / 24

Page 71: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

import numpy as np

Konvertiere Python-Liste in numpy-Arrayx = np.array([1, 3, 4])

Dies funktioniert auch mit mehr Dimensioneny = np.array([[1, 3, 4], [6, 8, 1], [0, 9, 4]])

numpy-Arrays können addiert oder multipliziert werdenprint(x + y)

print(x * y)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 17 / 24

Page 72: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

import numpy as np

Konvertiere Python-Liste in numpy-Arrayx = np.array([1, 3, 4])

Dies funktioniert auch mit mehr Dimensioneny = np.array([[1, 3, 4], [6, 8, 1], [0, 9, 4]])

numpy-Arrays können addiert oder multipliziert werdenprint(x + y)

print(x * y)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 17 / 24

Page 73: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

import numpy as np

Konvertiere Python-Liste in numpy-Arrayx = np.array([1, 3, 4])

Dies funktioniert auch mit mehr Dimensioneny = np.array([[1, 3, 4], [6, 8, 1], [0, 9, 4]])

numpy-Arrays können addiert oder multipliziert werdenprint(x + y)

print(x * y)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 17 / 24

Page 74: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

import numpy as np

Konvertiere Python-Liste in numpy-Arrayx = np.array([1, 3, 4])

Dies funktioniert auch mit mehr Dimensioneny = np.array([[1, 3, 4], [6, 8, 1], [0, 9, 4]])

numpy-Arrays können addiert oder multipliziert werdenprint(x + y)

print(x * y)

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 17 / 24

Page 75: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

Grosser Funktionsumfang

Lineare Algebraimport numpy as npimport numpy.linalg as npla

a = np.array([[5, 3, 0], [1, 2, 0], [0, 2, 11]])b = np.array([4, 8, 1])

x = npla.solve(a, b)

Statistik

Interpolation (z. B. Method der kleinsten Fehlerquadrate, Projekt 3)

. . .

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 18 / 24

Page 76: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

Grosser Funktionsumfang

Lineare Algebraimport numpy as npimport numpy.linalg as npla

a = np.array([[5, 3, 0], [1, 2, 0], [0, 2, 11]])b = np.array([4, 8, 1])

x = npla.solve(a, b)

Statistik

Interpolation (z. B. Method der kleinsten Fehlerquadrate, Projekt 3)

. . .

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 18 / 24

Page 77: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

Grosser Funktionsumfang

Lineare Algebraimport numpy as npimport numpy.linalg as npla

a = np.array([[5, 3, 0], [1, 2, 0], [0, 2, 11]])b = np.array([4, 8, 1])

x = npla.solve(a, b)

Statistik

Interpolation (z. B. Method der kleinsten Fehlerquadrate, Projekt 3)

. . .

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 18 / 24

Page 78: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul numpy

Grosser Funktionsumfang

Lineare Algebraimport numpy as npimport numpy.linalg as npla

a = np.array([[5, 3, 0], [1, 2, 0], [0, 2, 11]])b = np.array([4, 8, 1])

x = npla.solve(a, b)

Statistik

Interpolation (z. B. Method der kleinsten Fehlerquadrate, Projekt 3)

. . .

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 18 / 24

Page 79: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Page 80: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Modul zum Erstellen von Plots

Visualisierung von Daten

Untermodul matplotlib.pyplot erlaubt Verwendung analog zu MATLAB

Daten beispielsweise gegeben durch Python-Listen oder numpy-Arrays

import numpy as npimport matplotlib.pyplot as plt

plt.plot([1, 4, 9, 16, 25])plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 19 / 24

Page 81: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Modul zum Erstellen von Plots

Visualisierung von Daten

Untermodul matplotlib.pyplot erlaubt Verwendung analog zu MATLAB

Daten beispielsweise gegeben durch Python-Listen oder numpy-Arrays

import numpy as npimport matplotlib.pyplot as plt

plt.plot([1, 4, 9, 16, 25])plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 19 / 24

Page 82: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Modul zum Erstellen von Plots

Visualisierung von Daten

Untermodul matplotlib.pyplot erlaubt Verwendung analog zu MATLAB

Daten beispielsweise gegeben durch Python-Listen oder numpy-Arrays

import numpy as npimport matplotlib.pyplot as plt

plt.plot([1, 4, 9, 16, 25])plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 19 / 24

Page 83: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Angabe von x- und y-Werten:plt.plot([0, 4, 8, 12], [0, 10, 20, 35])plt.show()

Verwendung von numpy-Arrays:x = np.array([0, 4, 8, 12])y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Verwendung von arange() statt range():x = np.arange(0, 13, 4)y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 20 / 24

Page 84: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Angabe von x- und y-Werten:plt.plot([0, 4, 8, 12], [0, 10, 20, 35])plt.show()

Verwendung von numpy-Arrays:x = np.array([0, 4, 8, 12])y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Verwendung von arange() statt range():x = np.arange(0, 13, 4)y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 20 / 24

Page 85: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Angabe von x- und y-Werten:plt.plot([0, 4, 8, 12], [0, 10, 20, 35])plt.show()

Verwendung von numpy-Arrays:x = np.array([0, 4, 8, 12])y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Verwendung von arange() statt range():x = np.arange(0, 13, 4)y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 20 / 24

Page 86: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

Angabe von x- und y-Werten:plt.plot([0, 4, 8, 12], [0, 10, 20, 35])plt.show()

Verwendung von numpy-Arrays:x = np.array([0, 4, 8, 12])y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Verwendung von arange() statt range():x = np.arange(0, 13, 4)y = np.array([0, 10, 20, 35])plt.plot(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 20 / 24

Page 87: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 88: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 89: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 90: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 91: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 92: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

plot(〈x-Werte〉, 〈y-Werte〉, 〈Liste von Optionen〉)

import numpy as npimport matplotlib.pyplot as plt

x = np.arange(0, 10.01, 0.01)f1 = np.sin(x)f2 = np.cos(x)f3 = 0.01 * x**2 + 0.15 * x - 1

plt.plot(x, f1, color="red")plt.plot(x, f2, color="blue")plt.plot(x, f3, color="green")

plt.show()

Import von numpy und matplotlib

x-Werte 0, 0.01, 0.02, . . . , 10

Drei Funktionen: Sinus, Cosinus, Polynom(Plot wird noch nicht dargestellt)

Plot wird dargestellt

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 21 / 24

Page 93: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

OptionenFarbe, Linienform, Liniendicke, Punkte statt Linien, . . .Siehe Dokumentation

Beschriftung der Achsenplt.xlabel()

plt.ylabel()

AnimationenPlot kurz zeigen mit plt.pause() statt plt.plot()

Alten Plot löschen mit plt.close()Untermodul matplotlib.animation erlaubt professionellere AnimationenSiehe auch hierzu Dokumentation

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 22 / 24

Page 94: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

OptionenFarbe, Linienform, Liniendicke, Punkte statt Linien, . . .Siehe Dokumentation

Beschriftung der Achsenplt.xlabel()

plt.ylabel()

AnimationenPlot kurz zeigen mit plt.pause() statt plt.plot()

Alten Plot löschen mit plt.close()Untermodul matplotlib.animation erlaubt professionellere AnimationenSiehe auch hierzu Dokumentation

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 22 / 24

Page 95: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

OptionenFarbe, Linienform, Liniendicke, Punkte statt Linien, . . .Siehe Dokumentation

Beschriftung der Achsenplt.xlabel()

plt.ylabel()

AnimationenPlot kurz zeigen mit plt.pause() statt plt.plot()

Alten Plot löschen mit plt.close()Untermodul matplotlib.animation erlaubt professionellere AnimationenSiehe auch hierzu Dokumentation

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 22 / 24

Page 96: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

x = np.array([1, 2, 1.5, 1.75, 1.5])y = np.array([2, 1.75, 1.5, 2.25, 1.85])plt.scatter(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 4, 4, 8, 9, 6, 7, 6, 3, 2])plt.bar(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 1, 2, 3, 4, 2, 3, 6, 7, 9])plt.barh(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 23 / 24

Page 97: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

x = np.array([1, 2, 1.5, 1.75, 1.5])y = np.array([2, 1.75, 1.5, 2.25, 1.85])plt.scatter(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 4, 4, 8, 9, 6, 7, 6, 3, 2])plt.bar(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 1, 2, 3, 4, 2, 3, 6, 7, 9])plt.barh(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 23 / 24

Page 98: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Das Modul matplotlib

x = np.array([1, 2, 1.5, 1.75, 1.5])y = np.array([2, 1.75, 1.5, 2.25, 1.85])plt.scatter(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 4, 4, 8, 9, 6, 7, 6, 3, 2])plt.bar(x, y)plt.show()

x = np.arange(0, 10)y = np.array([1, 1, 2, 3, 4, 2, 3, 6, 7, 9])plt.barh(x, y)plt.show()

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 23 / 24

Page 99: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Animiertes Bubblesort

import matplotlib.pyplot as plt

def bubblesort(data):n = len(data)x = range(len(data))for d in range(n, 1, -1):

for i in range(0, d-1):plt.bar(x, data)plt.pause(0.001)plt.close()if data[i] > data[i+1]:

tmp = data[i]data[i] = data[i+1]data[i+1] = tmp

return data

print(bubblesort([6, 22, 61, 1, 89, 31, 9, 10, 76]))

Digitale Medizin I: Einführung in die Programmierung – numpy und matplotlib Herbst 2019 Böckenhauer, Komm 24 / 24

Page 100: Hans-Joachim Böckenhauer und Dennis Komm Digitale Medizin I: … · 2019. 12. 20. · Timsort nutzt z.B. vorsortierte Teilarrays aus Digitale Medizin I: Einführung in die Programmierung

Danke für die Aufmerksamkeit