Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update python notebooks #428

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,6 @@ dependencies:
- nbstripout
- black
- black-jupyter
- pooch
- pip:
- ./pygments_style
11 changes: 11 additions & 0 deletions python/data/sin_fit.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# x y
0.000000000000000000e+00 2.621434772918542211e-01
6.981317007977317912e-01 4.271280014348138643e+00
1.396263401595463582e+00 7.545732202022269242e+00
2.094395102393195263e+00 6.220187521589215507e+00
2.792526803190927165e+00 3.941252392172557517e+00
3.490658503988659067e+00 -1.676311649957553440e+00
4.188790204786390525e+00 -6.600078564315179364e+00
4.886921905584122428e+00 -7.537592236437750337e+00
5.585053606381854330e+00 -4.851500755032368772e+00
6.283185307179586232e+00 -6.476681314000437562e-01
72 changes: 41 additions & 31 deletions python/matplotlib.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,22 @@
"Damit wir nicht so viel tippen müssen, geben wir ihr den kürzeren Namen `plt`."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Folgende Zeilen sind nur hier wichtig und sollen **nicht** übernommen werden."
]
},
{
"cell_type": "code",
"execution_count": null,
Expand All @@ -27,8 +43,6 @@
"source": [
"from IPython.display import Image\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"plt.rcParams[\"figure.figsize\"] = (10, 8)\n",
"plt.rcParams[\"font.size\"] = 16\n",
"plt.rcParams[\"lines.linewidth\"] = 2"
Expand Down Expand Up @@ -58,7 +72,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Zu erst ein einfaches Beispiel mit $f(x)=x^2$.\n",
"Zuerst ein einfaches Beispiel mit $f(x)=x^2$.\n",
"Um den Text-Output in diesem Notebook zu unterdrücken, schreiben wir manchmal ein `;` hinter die letzte Zeile.\n",
"\n",
"Im Folgenden verwenden wir die objekt-orientierte Schreibweise von `matplotlib`, die mehr Möglichkeiten und Freiheiten bietet.\n",
Expand Down Expand Up @@ -112,8 +126,15 @@
},
"outputs": [],
"source": [
"fig2, ax2 = plt.subplots()\n",
"ax2.plot(t, np.sin(t), \"r--\");"
"fig, ax = plt.subplots()\n",
"ax.plot(t, np.sin(t), \"r--\");"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Mit `ax.cla()` entfernen wir alles, was wir vorher in das Achsenobjekt geschrieben haben."
]
},
{
Expand Down Expand Up @@ -163,7 +184,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Neue Grenzen mit `set_xlim(a, b)` und `set_ylim(a, b)`"
"Neue Grenzen setzen mit `set_xlim(a, b)` und `set_ylim(a, b)`"
]
},
{
Expand All @@ -179,15 +200,6 @@
"fig"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"fig2"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand All @@ -209,6 +221,7 @@
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true,
"tags": []
},
"outputs": [],
Expand All @@ -228,9 +241,8 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Einheiten in Achsenbeschriftungen werden wegdividiert:\n",
"\n",
"Achsen-Beschriftungen können mit LaTeX-Code erstellt werden → LaTeX-Kurs in der nächsten Woche."
"## Einheiten in Achsenbeschriftungen werden weg dividiert:\n",
"Achsenbeschriftungen können mit LaTeX-Code erstellt werden → LaTeX-Kurs in der nächsten Woche."
]
},
{
Expand Down Expand Up @@ -258,7 +270,7 @@
"source": [
"Mehr zu Einheiten gibt es im LaTeX-Kurs.\n",
"\n",
"Als eine alternative Schreibweise für die verschiedenen settings der `axes` kann man auch"
"Als eine alternative Schreibweise für die verschiedenen Einstellungen der `axes` kann man auch"
]
},
{
Expand Down Expand Up @@ -288,8 +300,7 @@
"metadata": {},
"source": [
"## Legende\n",
"\n",
"Legenden für Objekte die ein `label` tragen"
"Legenden für Objekte, die ein `label` tragen."
]
},
{
Expand All @@ -316,19 +327,18 @@
"source": [
"Seit matplotlib 2.0.2 ist `loc=best` standardmäßig eingestellt.\n",
"\n",
"Andere möglche Orte für die Legende findest du [in der Dokumentation](https://matplotlib.org/stable/api/legend_api.html)."
"Andere mögliche Orte für die Legende findest du [in der Dokumentation](https://matplotlib.org/stable/api/legend_api.html)."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Gitter\n",
"\n",
"Mit `grid()` wird ein Gitter erstellt:\n",
"\n",
"Hier wird auch der Vorteil der objekt-orientierten Schreibweise deutlich. Wir müssen keinen neuen plot erstellen, sondern können dem in `fig` hinterlegten neue Eigenschaften hinzufügen.\n",
"Andere möglche Orte für die Legende findest du hier:\n",
"Andere mögliche Orte für die Legende findest du hier:\n",
"https://matplotlib.org/api/legend_api.html."
]
},
Expand Down Expand Up @@ -543,7 +553,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Dies führt manchmal zu Spacing-Problemen und Teilen die sich überschneiden."
"Dies führt manchmal zu Spacing-Problemen und Teilen, die sich überschneiden."
]
},
{
Expand Down Expand Up @@ -668,7 +678,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"### Polar-Plot\n",
"### Polarplot\n",
"Manchmal braucht man einfach einen Polarplot:"
]
},
Expand Down Expand Up @@ -785,9 +795,9 @@
"source": [
"# Nicht-Objektorientiertes Plotten\n",
"Bis jetzt haben wir die ausführliche, objektorientierte Variante von matplotlib benutzt.\n",
"Es git auch die \"schnelle\" Variante mit der einfacheren `pyplot`-Syntax. Wenn man viele Plots anlegt, ist der objekt-orientierte Ansatz für matplotlib allerdings meist besser geeignet.\n",
"Es gibt auch die \"schnelle\" Variante mit der einfacheren `pyplot`-Syntax. Wenn man viele Plots anlegt, ist der objekt-orientierte Ansatz für matplotlib allerdings meist besser geeignet.\n",
"\n",
"Die Schreibweise `plt.plot` zeigen wir hier einmal der Vollständig halber und damit auf Stack Overflow oder ähnlichen Seiten keine Verwirrung entsteht.\n",
"Die Schreibweise `plt.plot` zeigen wir hier einmal, der Vollständig halber und damit auf Stack Overflow oder ähnlichen Seiten keine Verwirrung entsteht.\n",
"Es besteht eigentlich kein wirklicher Grund, diese Schreibweise aktiv zu nutzen."
]
},
Expand Down Expand Up @@ -862,7 +872,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Manchmal möchte man komplexere Layouts für Plots haben. Hierbei ist `plt.subplots()` insofern eingeschränkt, dass die Subplots nur auf einem $(N\\times M)$-Gitter angeordnet werden können, bei dem jede Position auf dem Gitter mit einem einzelnen Plot besetzt wird. Hier beispielsweise $(2\\times 3)$:"
"Manchmal möchte man komplexere Layouts für Plots haben. Hierbei ist `plt.subplots()` insofern eingeschränkt, als dass die Subplots nur auf einem $(N\\times M)$-Gitter angeordnet werden können, bei dem jede Position auf dem Gitter mit einem einzelnen Plot besetzt wird. Hier beispielsweise $(2\\times 3)$:"
]
},
{
Expand Down Expand Up @@ -993,7 +1003,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Bisher haben wir immer nur das $(2\\times 3)$-Layout nachgebaut, welches wir auch einfach mit `plt.subplots()` erzeugen können. Der Vorteil von `plt.subplot_mosaic()` liegt nun darin, dass wir Subplots auch über mehrere Zeilen oder Spalten ziehen können. Hierzu werden Benachbarte Gitterpositionen einfach gleich benannt:"
"Bisher haben wir immer nur das $(2\\times 3)$-Layout nachgebaut, welches wir auch einfach mit `plt.subplots()` erzeugen können. Der Vorteil von `plt.subplot_mosaic()` liegt nun darin, dass wir Subplots auch über mehrere Zeilen oder Spalten ziehen können. Hierzu werden benachbarte Gitterpositionen einfach gleich benannt:"
]
},
{
Expand Down Expand Up @@ -1081,7 +1091,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Hierbei nutzen wir die `ax.get_label()` Methode um in der `ax.annotate()` Methode einen Text (unser Label) mit Ausrichtung oben (\"vertical alignment\", `va=\"top\"`) an die Relativkoordinate $(0.05, 0.95)$ der Achse zu setzen. Die Zeile `anchor = ax.get_window_extent()` zusammen mit dem Keyword-Argument `xycoords=anchor` in `ax.annotate()` sorgt dafür, dass wir uns im Koordinatensystem der Achse befinden und nicht im Koordinatensystem des etwaigen Plotinhalts selbst."
"Hierbei nutzen wir die `ax.get_label()` Methode, um in der `ax.annotate()` Methode einen Text (unser Label) mit Ausrichtung oben (\"vertical alignment\", `va=\"top\"`) an die Relativkoordinate $(0.05, 0.95)$ der Achse zu setzen. Die Zeile `anchor = ax.get_window_extent()` zusammen mit dem Keyword-Argument `xycoords=anchor` in `ax.annotate()` sorgt dafür, dass wir uns im Koordinatensystem der Achse befinden und nicht im Koordinatensystem des etwaigen Plotinhalts selbst."
]
},
{
Expand Down
16 changes: 6 additions & 10 deletions python/numeric-python.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -170,10 +170,8 @@
"outputs": [],
"source": [
"import math\n",
"\n",
"# This doesn't work\n",
"\n",
"# math.cos(x_arr)"
"math.cos(x_arr)"
]
},
{
Expand Down Expand Up @@ -238,7 +236,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Das erlaubt es einem unter anderem, sehr leicht physikalische Formeln auf seine Datenpunkte anzuwenden.\n",
"Das erlaubt es einem unter anderem sehr leicht physikalische Formeln auf seine Datenpunkte anzuwenden.\n",
"\n",
"Arrays können beliebige Dimension haben:"
]
Expand Down Expand Up @@ -317,7 +315,7 @@
"\n",
"Die Gesamtzahl der Elemente in einem Array können mit der `size`-Funktion abgefragt werden.\n",
"\n",
"Der Datentyp eines Arrays muss innerhalb des Arrays der gleiche sein. Um den Datentyp eines Arrays abzufragen gibt es die `dtype`-Funktion."
"Der Datentyp eines Arrays muss innerhalb des Arrays der gleiche sein. Um den Datentyp eines Arrays abzufragen, gibt es die `dtype`-Funktion."
]
},
{
Expand Down Expand Up @@ -652,7 +650,6 @@
"metadata": {},
"source": [
"# Reduzieren von Arrays\n",
"\n",
"Viele Rechenoperationen reduzieren ein Array auf einen einzelnen Wert."
]
},
Expand Down Expand Up @@ -785,7 +782,7 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"Um die Differenzen zwischen benachbarten Elementen herauszufinden kann die Funktion `np.diff()` genutzt werden."
"Um die Differenzen zwischen benachbarten Elementen herauszufinden, kann die Funktion `np.diff()` genutzt werden."
]
},
{
Expand All @@ -805,7 +802,6 @@
"metadata": {},
"source": [
"# Input / Output\n",
"\n",
"Um Datenpunkte aus einer Textdatei einzulesen wird die Funktion `np.genfromtxt()` genutzt.\n",
"Sie gibt den Inhalt einer Textdatei als Array zurück.\n",
"\n",
Expand Down Expand Up @@ -935,7 +931,7 @@
"metadata": {},
"source": [
"Das resultierende Array `data` ist besonders, da es ein sogenanntes `structured array` ist.\n",
"Dies ist ein NumPy Array in dem quasi mehrere Arrays in einem abgespeichert sind. Die einzelnen Arrays werden in der Dokumentation `fields` genannt und haben jeweils einen zugeordneten Namen und einen Datentyp."
"Dies ist ein NumPy Array, in dem quasi mehrere Arrays in einem abgespeichert sind. Die einzelnen Arrays werden in der Dokumentation `fields` genannt und haben jeweils einen zugeordneten Namen und einen Datentyp."
]
},
{
Expand Down Expand Up @@ -981,7 +977,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.6"
"version": "3.12.6"
}
},
"nbformat": 4,
Expand Down
33 changes: 14 additions & 19 deletions python/python.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -114,11 +114,11 @@
"metadata": {},
"outputs": [],
"source": [
"# We start the workshop with the traditional first program\n",
"print(\"Hello, World!\")\n",
"\"\"\"\n",
"This example is chosen to show the basic functionalities of python.\n",
"\"\"\""
"We start the workshop with the traditional first program.\n",
"\"\"\"\n",
"print(\"Hello, World!\")\n",
"# This example is chosen to show the basic functionalities of python. "
]
},
{
Expand Down Expand Up @@ -1760,9 +1760,9 @@
"metadata": {},
"source": [
"## Allgemeiner Syntax-Fehler: `SyntaxError`\n",
"Zeile in der der Fehler auftritt: `line 6` \n",
"Grund für den Fehler: `SyntaxError: invalid syntax` \n",
"Hier sogar mit Hinweis auf das fehlerhafte/fehlende Zeichen.\n"
"Zeile, in der der Fehler auftritt: `line 6` \n",
"Grund für den Fehler: `SyntaxError: expected ':'` \n",
"Hier sogar mit Hinweis auf das fehlerhafte/fehlende Zeichen."
]
},
{
Expand All @@ -1789,15 +1789,10 @@
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ein zu Anfang verwirrender Fehler\n",
"\n",
"Die Fehlermeldung ist hier im ersten Moment nicht besonders hilfreich: \n",
"Zeile in der der Fehler auftritt: `line 11` \n",
"Grund für den Fehler: `SyntaxError: invalid syntax` \n",
"\n",
"Stimmt nur zum Teil, denn in Zeile 11 ist alles in Ordnung und der eigentliche Fehler ist in Zeile 10. \n",
"In komplexeren Programmen ist das nicht mehr so einfach zu sehen wie hier,\n",
"deswegen ist es gut, wenn man dieses Verhalten schon mal gesehen hat."
"## Klammerfehler\n",
"Zeile, in der der Fehler auftritt: `line 10` \n",
"Grund für den Fehler: `SyntaxError: '(' was never closed` \n",
"Hier sogar mit Hinweis auf die Klammer, die keinen Partner hat."
]
},
{
Expand Down Expand Up @@ -1907,9 +1902,9 @@
"gibt die Fehlermeldung einen *Traceback* aus.\n",
"Dieser Fall ist eher die Regel, vor allem, wenn Module verwendet werden.\n",
"Der *Traceback* zeigt die Reihenfolge aller Funktionsaufrufe, die\n",
"am Ende zu dem Fehler geführt haben mit dem letzten Aufruf ganz unten *(most recent call last)*.\n",
"am Ende zu dem Fehler geführt haben, mit dem letzten Aufruf ganz unten *(most recent call last)*.\n",
"\n",
"Zeilen die zum Auftreten des Fehlers führen: \n",
"Zeilen, die zum Auftreten des Fehlers führen: \n",
"Funktionsaufruf in Zeile 13: \n",
"`---> 13 add_one_to_inverse_difference(x,y)` \n",
"Ergebnis des Funktionsaufrufs ist das `return` in Zeile 5 mit neuem Funktionsaufruf: \n",
Expand Down Expand Up @@ -2285,7 +2280,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.10"
"version": "3.12.6"
}
},
"nbformat": 4,
Expand Down
Loading
Loading