{ "cells": [ { "cell_type": "markdown", "metadata": { "collapsed": true, "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "# Arbeiten mit dem IPython-Notebook \n", "Gert-Ludwig Ingold \n", "
Quellen: `git clone https://github.com/gertingold/lit2015`
\n", "
statische Ansicht: http://nbviewer.ipython.org/github/gertingold/lit2015/blob/master/lit2015.ipynb
\n", "
Python and Plone User Group Meeting, München, 2.6.2015
" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Aus Newtons Notizbuch" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "source": [ "" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "### Von Newton zum modernen Notebook\n", "* *Erläuterungen* \n", " Text, der Gliederungen und mathematische Formeln enthalten kann\n", "* *mathematische Umformungen* \n", "Programmcode und das daraus resultierende Ergebnis\n", "* *Abbildungen* \n", "graphische Darstellungen und Multimedia-Objekte\n", "* *Darstellung* \n", "HTML, PDF, …" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "### Anwendungen von Notebooks\n", "* Entwicklung kleinerer Python-Skripte \n", " Beispiel: Optimierung für Cython\n", "* Dokumentation \n", " Beispiel: Datenanalyse\n", "* Lehrmaterial \n", " Beispiele: Unterricht, Programmierkurs\n", "* Lehrbücher \n", " Beispiele: [nbviewer.ipython.org](http://nbviewer.ipython.org/), Abschnitt Books\n", "* Präsentation mit Notebook-Erweiterung RISE von Damián Avila\n", "* …" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "## Python\n", "\n", "* interpretierte Sprache\n", "* vergleichsweise leicht erlernbar\n", "* \"Python comes with batteries included\"\n", "* SciPy Stack: NumPy, SciPy, Matplotlib, pandas,..." ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "## IPython - die verbesserte Python-Shell\n", "\n", "* 2001: Start des IPython Projekts durch Fernando Pérez.\n", "* Dezember 2011: Mit IPython 0.12 wird das **IPython Notebook** eingeführt. \n", "* 2013–2014: Die Entwicklung von IPython wird mit 1.15 Millionen Dollar von der Alfred P. Sloan Stiftung unterstützt.\n", "* August 2013: Microsoft unterstützt die Entwicklung von IPython mit 100.000 Dollar.\n", "* 27\\. Februar 2015: Freigabe der Version 3.0.\n", "* Teilaspekt des Horizon-2020-Projekts [OpenDreamKit](http://opendreamkit.org)\n", "* Nächster Meilenstein: Der sprachunabhängige Teil geht in das [Jupyter-Projekt](http://jupyter.org) über." ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "### IPython-Quellen\n", "Homepage: [ipython.org](http://ipython.org) \n", "Repository: [github.com/ipython/ipython](http://github.com/ipython/ipython) \n", "Mailing-Liste: ipython-dev@scipy.org\n", "\n", "### Pakete für Debian und Ubuntu:\n", "`ipython-notebook` / `ipython3-notebook` \n", "ipython 1.2.1: Debian wheezy-backports, Ubuntu 14.04LTS \n", "ipython 2.3.0: Debian jessie, Ubuntu 15.04 \n", "ipython 3.1.0: [pypi.python.org](http://pypi.python.org)\n", "\n", "### Installation in ein virtual environment\n", "`pip install \"ipython[notebook]\"`\n", "\n", "siehe auch: [ipython.org/install.html](http://ipython.org/install.html)\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "## Notebook-Zellen\n", "\n", "* Codezellen\n", "* Textzellen\n", "* Zellen mit Rohdaten zur Interpretation durch `NBConvert`" ] }, { "cell_type": "markdown", "metadata": { "internals": { "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "### Umgang mit Notebook-Zellen\n", "\n", "Die ausgewählte Notebook-Zelle befindet sich in einem von zwei Modi:\n", "\n", "* Kommandomodus = schwarzer Rahmen\n", "* Eingabemodus = grüner Rahmen und Stiftsymbol im Kopfbereich\n", "* Wechsel in den Eingabemodus: `ENTER` oder Doppelklicken\n", "* Wechsel in den Kommandomodus: `ESC` oder `STRG-M`" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_number": 9, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "### Nützliche Tastenkürzel\n", "\n", "* `SHIFT-ENTER`, `STRG-ENTER`: Ausführen der aktuellen Zelle\n", "* `ALT-ENTER`: Ausführen der aktuellen Zelle und Öffnen einer neuen Zelle\n", "* `A`: Einfügen einer neuen Zelle über der aktuellen Zelle\n", "* `B`: Einfügen einer neuen Zelle unter der aktuellen Zelle\n", "* `D,D`: Löschen der aktuellen Zelle\n", "* `M`: Definiere Zelle als Markdown-Zelle\n", "* `H`: Anzeige aller Tastenkürzel" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 9, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Codezellen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 11 }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "for n in range(3):\n", " print(\"Das IPython-Notebook ist toll.\")" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 11 }, "slideshow": { "slide_type": "-" } }, "source": [ "Die Codezellen werden in der Reihenfolge ihrer Ausführung nummeriert." ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 14 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "Unter Verwendung magischer Befehle kann man auch nicht in Python geschriebenen Code einbinden und ausführen, z.B. HTML:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 14, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%%html\n", " " ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 14, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Textzellen" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 14, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "source": [ "Zur Formatierung kann Markdown und HTML verwendet werden.\n", "\n", "Beispiele:\n", "* *Kursiver Text* oder _Kursiver Text_\n", "* **Fetter Text** oder __Fetter Text__\n", "* `Code`\n", "* hervorgehobener Text\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 14, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Mathematiksatz\n", "In Textzellen kann LaTeX-Syntax verwendet werden, um mathematische Symbole wie z.B. $\\ddot x$ oder aber ganze Formeln darzustellen:\n", "$$\\mathcal{L}\\{f(t)\\} = \\int_0^\\infty\\text{d}z\\text{e}^{-zt}f(t)$$" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 19 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "\n", "Hierzu wird MathJax ([www.mathjax.org](http://www.mathjax.org)) verwendet, das entweder eine Internetanbindung oder eine lokale Installation erfordert. Hinweise zur lokalen Installation erhält man zum Beispiel folgendermaßen:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 19, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from IPython.external import mathjax\n", "mathjax?" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 19, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "## Ausgewählte Vorteile der IPython-Shell" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 19, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Hilfe" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "internals": { "frag_helper": "fragment_end", "frag_number": 23 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import numpy as np\n", "np.tensordot?" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 24 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "Beschreibung mit Code (falls möglich)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "internals": { "frag_helper": "fragment_end", "frag_number": 24 }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "np.tensordot??" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 26 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "Codeergänzung mit `TAB`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 26, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "np." ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 26, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "### Bezug auf frühere Ergebnisse" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 29 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "2**3" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 30 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "_-8" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 31 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "__**2" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 32 }, "slideshow": { "slide_type": "fragment" } }, "source": [ "### Zugriff auf alle früheren Ein- und Ausgaben" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "In, Out" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "\n", "### Magische Befehle in IPython..." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%lsmagic" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Schnellanleitung" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%quickref" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 33, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Laufzeitbestimmungen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 39 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "%timeit 2.5**100" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true, "internals": { "frag_helper": "fragment_end", "frag_number": 40 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "import math" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 40 }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "%%timeit \n", "result = []\n", "nmax = 100000\n", "dx = 0.001\n", "for n in range(nmax):\n", " result.append(math.sin(n*dx))" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 42, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "%%timeit\n", "nmax = 100000\n", "dx = 0.001\n", "x = np.arange(nmax)*dx\n", "result = np.sin(x)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 42, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "slide" } }, "source": [ "## Erweiterte Darstellungsmöglichkeiten" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 42, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "IPython erlaubt eine Darstellung von Objekten in verschiedenen Formaten wie\n", "\n", "* HTML\n", "* Markdown\n", "* SVG\n", "* PNG\n", "* JPEG\n", "* LaTeX" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 42, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from IPython.display import Image\n", "Image(\"./images/ipython_logo.png\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from IPython.display import HTML\n", "HTML('')" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Auch die Einbindung von Audio- und Video-Dateien ist möglich" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from IPython.display import YouTubeVideo\n", "YouTubeVideo('F4rFuIb1Ie4')" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "source": [ "Python erlaubt die textliche Darstellung von Objekten mit der ``__repr__``-Methode. \n", "\n", "Beispiel:" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "class MyObject(object):\n", " def __init__(self, obj):\n", " self.obj = obj\n", " \n", " def __repr__(self):\n", " return \">>> {0!r} / {0!s} <<<\".format(self.obj)\n", " \n", "x = MyObject('Python')\n", "print(x)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "source": [ "Im IPython-Notebook ist eine reichhaltige Darstellung von Objekten durch Bereitstellung von entsprechenden Methoden möglich:\n", "\n", "* `_repr_pretty_`\n", "* `_repr_html_`\n", "* `_repr_markdown_`\n", "* `_repr_latex`\n", "* `_repr_svg_`\n", "* `_repr_json_`\n", "* `_repr_javascript_`\n", "* `_repr_png_`\n", "* `_repr_jpeg_`\n", "\n", "Achtung: jeweils nur ein Unterstrich im Gegensatz zu `__repr__`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "class RGBColor(object):\n", " def __init__(self, r, g, b):\n", " self.colordict = {\"r\": r, \"g\":g, \"b\": b}\n", " \n", " def _repr_svg_(self):\n", " return '''\n", " \n", " '''.format(**self.colordict)\n", "\n", "c = RGBColor(205, 128, 255)\n", "c" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from fractions import Fraction\n", "\n", "class MyFraction(Fraction):\n", " def _repr_html_(self):\n", " return \"%s%s\" % (self.numerator,\n", " self.denominator)\n", " \n", " def _repr_latex_(self):\n", " return r\"$\\frac{%s}{%s}$\" % (self.numerator, self.denominator)\n", " \n", " def __add__(a, b):\n", " \"\"\"a + b\"\"\"\n", " return MyFraction(a.numerator * b.denominator +\n", " b.numerator * a.denominator,\n", " a.denominator * b.denominator)\n", " \n", "MyFraction(12, 345)+MyFraction(67, 89)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "from IPython.display import display_latex\n", "display_latex(MyFraction(12, 345)+MyFraction(67, 89))" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 46, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Interaktion mit Widgets" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 56 }, "slideshow": { "slide_type": "fragment" } }, "outputs": [], "source": [ "from IPython.html.widgets import interact" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 56 }, "slideshow": { "slide_type": "-" } }, "outputs": [], "source": [ "@interact(x=(0., 10.), y=(0, 10))\n", "def power(y, x=2):\n", " print(x**y)" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 58, "slide_helper": "subslide_end" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "#### Datentypen und ihre Widgets\n", "\n", "Zeichenkette (`str`, `unicode`) → Text \n", "Dictionary (`dict`) → Dropdown \n", "logische Variable (`bool`) → Checkbox \n", "Gleitkommazahl (`float`) → FloatSlider \n", "ganze Zahl (`int`) → IntSlider" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 58, "slide_helper": "subslide_end", "slide_type": "subslide" }, "slide_helper": "subslide_end", "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "@interact(x=(0, 5),\n", " text=\"Python ist toll!!!\")\n", "def f(text, x=0):\n", " for _ in range(x):\n", " print(text)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false, "internals": { "frag_helper": "fragment_end", "frag_number": 58, "slide_type": "subslide" }, "slideshow": { "slide_type": "subslide" } }, "outputs": [], "source": [ "from IPython.html import widgets\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "%matplotlib inline\n", "# sonst werden Matplotlib-Graphiken in einem externen Fenster angezeigt\n", "\n", "@interact(harmonische=widgets.IntSlider(min=1, max=10, \n", " description='Anzahl der Harmonischen',\n", " padding='2ex'),\n", " funktion=widgets.RadioButtons(options=(\"Rechteck\",\n", " \"Sägezahn\",\n", " \"Dreieck\"),\n", " description='Funktion')\n", " )\n", "def f(harmonische, funktion):\n", " params = {\"Rechteck\": {\"sign\":1, \"stepsize\": 2, \"func\": np.sin, \"power\": 1},\n", " \"Sägezahn\": {\"sign\": -1, \"stepsize\": 1, \"func\": np.sin, \"power\": 1},\n", " \"Dreieck\": {\"sign\": 1, \"stepsize\": 2, \"func\": np.cos, \"power\": 2}\n", " }\n", " p = params[funktion]\n", " xvals, nvals = np.ogrid[-2*np.pi:2*np.pi:100j, 1:harmonische+1:p[\"stepsize\"]]\n", " yvals = np.sum(p[\"sign\"]**nvals*p[\"func\"](nvals*xvals)/nvals**p[\"power\"], axis=1)\n", " plt.plot(xvals, yvals)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true, "internals": { "frag_helper": "fragment_end", "frag_number": 61, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "fragment" } }, "source": [ "Siehe auch das Tutorial von Cyrille Rossant in https://github.com/rossant/euroscipy2014." ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 61, "slide_type": "subslide" }, "slideshow": { "slide_type": "slide" } }, "source": [ "## Umwandlung des IPython-Notebooks in verschiedene Ausgabeformate" ] }, { "cell_type": "markdown", "metadata": { "internals": { "frag_helper": "fragment_end", "frag_number": 61, "slide_helper": "subslide_end" }, "slide_helper": "slide_end", "slideshow": { "slide_type": "-" } }, "source": [ "`ipython notebook --to` *format* *Notebook-Datei* \n", "\n", "Ausgabeformate:\n", "* HTML für Ausgabe mit `reveal.js`\n", "* LaTeX, PDF\n", "* Markdown\n", "* Restructured Text\n", "* Python\n", "\n", "\n", "Statische Darstellung von Notebooks: [nbviewer.ipython.org](http://nbviewer.ipython.org \"nbviewer\")" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.4.3" } }, "nbformat": 4, "nbformat_minor": 0 }