{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Numpy Arrays und Funktionen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So macht man ein Kommentar" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Einfache Funktionen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Unsere erste einfache Funktion\n", "def hello_world():\n", " print \"Hello, world!\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Jetzt rufen wir die Funktion auf\n", "hello_world()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# noch eine Funktion\n", "def evaluate_product(a, b):\n", " return a * b\n", "\n", "# und der Aufruf\n", "evaluate_product(2, 8)" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "## Aufgabe: Schreibe eine Funktion die $x^2$ berechnet" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Funktionen mit Initialwerten" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def polynome(x,a,b=0,c=0):\n", " return a * x**2 + b * x + c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: ueberlege dir was bei den folgenden Aufrufen wohl passieren wird:\n", "polynome(3,1),\n", "polynome(3,1,2),\n", "polynome(3,5,1.2,3)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Vektoren mit numpy" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "#zuerst werden wir das Numpy Package importieren \n", "import numpy as np # wir benutzen \"as np\" um beim Aufruf des Packages nur np. davorzuschreiben" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so definieren wir einen numpy vector mit 3 Elementen, die alle den Eintrag 0 besitzen\n", "v0 = np.zeros(3)\n", "print v0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Wichtig zu merken" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# wie koennen wir eine andere Variable erzeugen, die die gleichen Werte wie v0 besitzt?\n", "a = v0\n", "print \"das ist a zu Beginn:\\t\" , a\n", "# nun manipulieren wir a\n", "a[1] = 2\n", "print \"das ist a nach der Manipulation:\\t\" , a\n", "# wie sieht nun aber v0 aus\n", "print \"das ist v0 jetzt:\\t\" , v0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Das ist oftmals nicht beabsichtigt!!!" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Wenn man eine eigenstaendige Kopie erstellen moechte, muss man den Befehl np.copy verwenden\n", "v0 = np.zeros(3)\n", "a = np.copy(v0)\n", "a[1] = 2\n", "print \"das ist a nach der Manipulation:\\t\" , a \n", "print \"das ist v0 jetzt:\\t\" , v0" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so definieren wir einen numpy vector mit 3 Elementen, die alle den Eintrag 1 besitzen\n", "v1 = np.ones(3)\n", "print v1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so definieren wir einen numpy vector mit 3 Elementen, die die Werte von 0 bis 2 haben\n", "v2 = np.arange(3.0)\n", "print v2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# dies ist die skalar vektor multiplikation\n", "print 10 * v1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so addieren wir v1 and v2\n", "print v1 + v2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Was passiert, wenn wir v1 * v2 berechnen?\n", "print v1 * v2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so berechnet man das Skalarprodukt von v1 und v2\n", "print np.dot(v1, v2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Manchmal ist es wichtig die Groesse des Vektors zu erfragen\n", "print np.size(v1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: Berechne den Betrag eines Vektors x in der Funktion betrag(x), benutze dabei np.sqrt um die Wurzel zu berechnen" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def betrag(x):\n", " return " ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "#numpy besitzt allerdings auch eine Funktion, die dies fuer uns uebernimmt\n", "print np.linalg.norm(v1)\n", "# oder\n", "print np.sqrt(np.sum(v1**2))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Matrizen mit numpy" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# wir fangen mit einer 3x3 Matrix an, dessen Eintraege alle 0 sind\n", "M0 = np.zeros((3,3))\n", "print M0" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Wie saehe die dann mit dem Eintrag 1 aus \n", "M1 = np.ones((3,3))\n", "print M1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So kann man eine Einheitsmatrix erzeugen\n", "M2 = np.eye(3)\n", "print M2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So addieren wir M1 und M2\n", "print M1 + M2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Was passiert, wenn wir M1 * M2 schreiben?\n", "print M1 * M2" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So berechnen wir das Matrixprodukt von M1 und M2\n", "print np.dot(M1, M2)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So berechnet man das Matrix-Vektor-ProduKt zwischen M1 und v1\n", "print np.dot(M1, v1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: Berechne das rechtseitige Matrixprodukt v2 * M1" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Hint: mit np.tranpose kann ein Vektor transponiert werden" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## numpy array schneiden" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So kann man eine 4x4 matrix erzeugen mit Werten zwischen 0 und 15\n", "M = np.arange(4.0*4.0).reshape((4,4))\n", "print M" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so bekommt man nur die erste Spalte\n", "print M[:, 0]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so nur die ersten zwei Zeilen\n", "print M[:2, :]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so bekommt man den oberen linken 2x2 Block von M\n", "print M[:2, :2]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so den unteren rechten 2x2 block von M\n", "print M[2:, 2:]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# so koennen wir den zentralen 2x2 block auf Null setzen\n", "M[1:-1, 1:-1] = 0.\n", "print M" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: Wie bekommt man den unteren linken 3x3 Block" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## numpy array Summation" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So berechnet man die Summe von M\n", "print M.sum()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So berechnet man die Summen fuer jede Spalte\n", "print M.sum(axis=0)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# So fuer jede Zeile\n", "print M.sum(axis=1)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# lets compute the sum of the two central rows of M\n", "print M[1:-1, :].sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: Berechne die Summe der ersten und der zweiten Spalte" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Boolean arrays" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Wir erzeugen ein Array mit Zahlen zwischen 0 und 15\n", "a = np.arange(16)\n", "print a" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# nun berechnen wir die Eintraege wo der Wert groesser ist als 5\n", "g5 = (a>5)\n", "print g5\n", "print a[g5]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Nun diejenigen, die kleiner sind als 10\n", "s10 = (a<10)\n", "print s10\n", "print a[s10]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# Nun koennen wir mit diesen experimentieren. Was passiert hier wohl?\n", "print a[g5-s10]\n", "print a[g5*s10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Aufgabe: Lass dir nur die Zahlen, die groesser als 2, aber kleiner als 5 ausgeben" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.10" } }, "nbformat": 4, "nbformat_minor": 0 }