{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Introducción a Python para ciencias e ingenierías (notebook 4)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ing. Martín Gaitán\n", "\n", "Twitter: `@tin_nqn_`\n", "\n", "** Registrá tu asistencia a esta clase **\n", "### http://goo.gl/forms/olbkNwX700\n", "\n", "**Links útiles**\n", "\n", "Repositorio del curso:\n", "\n", "### http://bit.ly/cursopy\n", "\n", "Python \"temporal\" online:\n", "\n", "### http://try.jupyter.org\n", "\n", "- Descarga de [Python \"Anaconda\"](http://continuum.io/downloads#py34)\n", "- Resumen de [sintaxis markdown](https://github.com/jupyter/strata-sv-2015-tutorial/blob/master/resources/Working%20With%20Markdown%20Cells.ipynb)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "## Matplotlib, un gráfico vale más que mil palabras" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python es un lenguaje muy completo pero, aunque es muy grande, su librería estándar no es infinita. Por suerte hay [miles y miles de bibliotecas extras](https://pypi.python.org) para complementar casi cualquier aspecto en el que queramos aplicar Python. En algunos ámbitos, con soluciones muy destacadas.\n", "\n", "Para hacer gráficos la opción canónica es Matplotlib http://matplotlib.org/ . Ya viene instalado con la versión completa de Anaconda.\n", "\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%matplotlib inline " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": false }, "outputs": [], "source": [ "from matplotlib import pyplot # generalmente importado \"as plt\"" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[-5.0,\n", " -4.9,\n", " -4.800000000000001,\n", " -4.7,\n", " -4.6000000000000005,\n", " -4.5,\n", " -4.4,\n", " -4.3,\n", " -4.2,\n", " -4.1000000000000005,\n", " -4.0,\n", " -3.9000000000000004,\n", " -3.8000000000000003,\n", " -3.7,\n", " -3.6,\n", " -3.5,\n", " -3.4000000000000004,\n", " -3.3000000000000003,\n", " -3.2,\n", " -3.1,\n", " -3.0,\n", " -2.9000000000000004,\n", " -2.8000000000000003,\n", " -2.7,\n", " -2.6,\n", " -2.5,\n", " -2.4000000000000004,\n", " -2.3000000000000003,\n", " -2.2,\n", " -2.1,\n", " -2.0,\n", " -1.9000000000000001,\n", " -1.8,\n", " -1.7000000000000002,\n", " -1.6,\n", " -1.5,\n", " -1.4000000000000001,\n", " -1.3,\n", " -1.2000000000000002,\n", " -1.1,\n", " -1.0,\n", " -0.9,\n", " -0.8,\n", " -0.7000000000000001,\n", " -0.6000000000000001,\n", " -0.5,\n", " -0.4,\n", " -0.30000000000000004,\n", " -0.2,\n", " -0.1,\n", " 0.0,\n", " 0.1,\n", " 0.2,\n", " 0.30000000000000004,\n", " 0.4,\n", " 0.5,\n", " 0.6000000000000001,\n", " 0.7000000000000001,\n", " 0.8,\n", " 0.9,\n", " 1.0,\n", " 1.1,\n", " 1.2000000000000002,\n", " 1.3,\n", " 1.4000000000000001,\n", " 1.5,\n", " 1.6,\n", " 1.7000000000000002,\n", " 1.8,\n", " 1.9000000000000001,\n", " 2.0,\n", " 2.1,\n", " 2.2,\n", " 2.3000000000000003,\n", " 2.4000000000000004,\n", " 2.5,\n", " 2.6,\n", " 2.7,\n", " 2.8000000000000003,\n", " 2.9000000000000004,\n", " 3.0,\n", " 3.1,\n", " 3.2,\n", " 3.3000000000000003,\n", " 3.4000000000000004,\n", " 3.5,\n", " 3.6,\n", " 3.7,\n", " 3.8000000000000003,\n", " 3.9000000000000004,\n", " 4.0,\n", " 4.1000000000000005,\n", " 4.2,\n", " 4.3,\n", " 4.4,\n", " 4.5,\n", " 4.6000000000000005,\n", " 4.7,\n", " 4.800000000000001,\n", " 4.9,\n", " 5.0]" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = [0.1*i for i in range(-50, 51)]\n", "x" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[25.0,\n", " 24.010000000000005,\n", " 23.040000000000006,\n", " 22.090000000000003,\n", " 21.160000000000004,\n", " 20.25,\n", " 19.360000000000003,\n", " 18.49,\n", " 17.64,\n", " 16.810000000000006,\n", " 16.0,\n", " 15.210000000000003,\n", " 14.440000000000001,\n", " 13.690000000000001,\n", " 12.96,\n", " 12.25,\n", " 11.560000000000002,\n", " 10.890000000000002,\n", " 10.240000000000002,\n", " 9.610000000000001,\n", " 9.0,\n", " 8.410000000000002,\n", " 7.840000000000002,\n", " 7.290000000000001,\n", " 6.760000000000001,\n", " 6.25,\n", " 5.760000000000002,\n", " 5.290000000000001,\n", " 4.840000000000001,\n", " 4.41,\n", " 4.0,\n", " 3.6100000000000003,\n", " 3.24,\n", " 2.8900000000000006,\n", " 2.5600000000000005,\n", " 2.25,\n", " 1.9600000000000004,\n", " 1.6900000000000002,\n", " 1.4400000000000004,\n", " 1.2100000000000002,\n", " 1.0,\n", " 0.81,\n", " 0.6400000000000001,\n", " 0.4900000000000001,\n", " 0.3600000000000001,\n", " 0.25,\n", " 0.16000000000000003,\n", " 0.09000000000000002,\n", " 0.04000000000000001,\n", " 0.010000000000000002,\n", " 0.0,\n", " 0.010000000000000002,\n", " 0.04000000000000001,\n", " 0.09000000000000002,\n", " 0.16000000000000003,\n", " 0.25,\n", " 0.3600000000000001,\n", " 0.4900000000000001,\n", " 0.6400000000000001,\n", " 0.81,\n", " 1.0,\n", " 1.2100000000000002,\n", " 1.4400000000000004,\n", " 1.6900000000000002,\n", " 1.9600000000000004,\n", " 2.25,\n", " 2.5600000000000005,\n", " 2.8900000000000006,\n", " 3.24,\n", " 3.6100000000000003,\n", " 4.0,\n", " 4.41,\n", " 4.840000000000001,\n", " 5.290000000000001,\n", " 5.760000000000002,\n", " 6.25,\n", " 6.760000000000001,\n", " 7.290000000000001,\n", " 7.840000000000002,\n", " 8.410000000000002,\n", " 9.0,\n", " 9.610000000000001,\n", " 10.240000000000002,\n", " 10.890000000000002,\n", " 11.560000000000002,\n", " 12.25,\n", " 12.96,\n", " 13.690000000000001,\n", " 14.440000000000001,\n", " 15.210000000000003,\n", " 16.0,\n", " 16.810000000000006,\n", " 17.64,\n", " 18.49,\n", " 19.360000000000003,\n", " 20.25,\n", " 21.160000000000004,\n", " 22.090000000000003,\n", " 23.040000000000006,\n", " 24.010000000000005,\n", " 25.0]" ] }, "execution_count": 5, "metadata": {}, "output_type": "execute_result" } ], "source": [ "y = [x_i**2 for x_i in x]\n", "y" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pyplot.plot(x,y)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Los gráficos emergentes son buenos porque tiene la barra de herramientas (interactividad) y podemos guardarlos en excelente calidad a golpe de mouse. Pero en los notebooks podemos poner los gráficos directamente incrustados" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pyplot.plot(x,y)\n", "pyplot.title('Pará bola!')\n", "pyplot.scatter([0, 2], [15, 25])\n", "pyplot.annotate(s='un punto', xy=(0, 15), xytext=(0.3, 15.2))\n", "pyplot.annotate(s='otro un punto', xy=(2, 25), xytext=(2.3, 25.2))\n", "pyplot.grid()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Matplotlib sabe hacer muchísimos tipos de gráficos!" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Component,Mol fraction\r\n", "n2,0.46\r\n", "co2,3.36\r\n", "c1,62.36\r\n", "c2,8.9\r\n", "c3,5.31\r\n", "c4,3.01\r\n", "c5,1.5\r\n", "c6,1.05\r\n", "c7,2.0\r\n", "c7+,12.049\r\n" ] } ], "source": [ "!cat data/near_critical_oil.csv" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import csv\n", "\n", "with open('data/near_critical_oil.csv') as csv_file:\n", " reader = csv.reader(csv_file)\n", " critical_oil = [line for line in reader] #o list(reader)\n", "\n", "components = [c for (c, f) in critical_oil[1:]]\n", "fraction = [float(f) for (c, f) in critical_oil[1:]]\n", "# el ; evita el output de la celda\n", "pyplot.pie(fraction, labels=components, shadow=True);" ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import random\n", "campana = [random.gauss(0, 0.5) for i in range(1000)]" ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pyplot.hist(campana, bins=15);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### La \"papa\" de matplotlib\n", "\n", " **Este es el algoritmo más importante para graficar con matplotlib**\n", "\n", "\n", "1. Ir a http://matplotlib.org/gallery\n", "2. Elegir el gráfico de ejemplo que más se parezca a lo que queremos lograr\n", "3. Copiar el código del ejemplo y adaptarlo a nuestros datos y gustos\n", "\n", "![](files/img/lo_importante.png)\n" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "\n", "\n", "N = 20\n", "theta = np.linspace(0.0, 2 * np.pi, N, endpoint=False)\n", "radii = 10 * np.random.rand(N)\n", "width = np.pi / 4 * np.random.rand(N)\n", "\n", "ax = plt.subplot(111, projection='polar')\n", "bars = ax.bar(theta, radii, width=width, bottom=0.0)\n", "\n", "# Use custom colors and opacity\n", "for r, bar in zip(radii, bars):\n", " bar.set_facecolor(plt.cm.jet(r / 10.))\n", " bar.set_alpha(0.5)\n", "\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicios\n", "\n", "1. Dada la función para el cálculo de raices de una ecuación de segundo grado [implementada](https://gist.githubusercontent.com/mgaitan/cb0ad9778453607acb49/raw/8d85d2184a4b46b48440cf5b5d95062801a08cce/baskara.py) en clases anteriores, crear una función que dados los coeficientes grafique la parábola y denote las raices con puntos rojos y el valor de X en cada una. \n", "\n", "\n", "\n", "\n", "2. Basado en el [ejemplo de grafico de torta](http://matplotlib.org/examples/pie_and_polar_charts/pie_demo_features.html) de la galería, adaptar el ejemplo que grafica \"near_critical_oil.csv\" para que no se vea \"ovoide\" y la porción correspondiente a \"C2\" quede separada. Agregar un título al gráfico\n" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# %load https://gist.githubusercontent.com/mgaitan/f0ceedbc1890038cf27f/raw/48fe60095644647d8b5b084b60547b4da0751201/plot_parabola.py\n", "def baskara(a, b=0, c=0):\n", " \"\"\"dados los coeficientes, encuentra los valores de x tal que ax^2 + bx + c = 0\"\"\"\n", "\n", " discriminante = (b**2 - 4*a*c)**0.5\n", " x1 = (-b + discriminante)/(2*a)\n", " x2 = (-b - discriminante)/(2*a)\n", " return (x1, x2)\n", "\n", "\n", "def plot_parabola(a, b=0, c=0):\n", " X = [.1 * i for i in range(-50, 51)]\n", " Y = [(a*x**2 + b*x + c) for x in X]\n", " pyplot.plot(X,Y)\n", " pyplot.plot(x, [0 for x in X], linestyle='dashed')\n", " pyplot.title('un titulo')\n", " x1, x2 = baskara(a, b, c)\n", " if not isinstance(x1, complex):\n", " pyplot.scatter([x1, x2], [0, 0], color='red')\n", " pyplot.annotate(s=round(x1, 2), xy=(x1, 0), xytext=(x1+0.3, .2))\n", " pyplot.annotate(s=round(x2, 2), xy=(x2, 0), xytext=(x2 + .3, .2))\n", " \n", " \n", "plot_parabola(1.2, b=0.4, c=-1.4)\n" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\niH4DJf4cj4WMUhgAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import csv\n", "\n", "with open('data/near_critical_oil.csv') as csv_file:\n", " reader = csv.reader(csv_file)\n", " critical_oil = [line for line in reader] #o list(reader)\n", "\n", "components = [c for (c, f) in critical_oil[1:]]\n", "fraction = [float(f) for (c, f) in critical_oil[1:]]\n", "explode = [0.2 if c == 'c2' else 0 for c in components]\n", "# el ; evita el output de la celda\n", "\n", "pyplot.pie(fraction, explode=explode, labels=components, shadow=True)\n", "pyplot.axis('equal');" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Antes de seguir con Matplotlib debemos aprender el corazón del Python Cientifico: **Numpy**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Numpy, todo es un array" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El paquete **numpy** es usado en casi todos los cálculos numéricos usando Python. Es un paquete que provee a Python de estructuras de datos vectoriales, matriciales y de rango mayor, de alto rendimiento. Está implementado en C y Fortran, de modo que cuando los cálculos son vectorizados (formulados con vectores y matrices), el rendimiento es muy bueno." ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El pilar de numpy (y toda la computación científica basada en Python) es el tipo de datos `ndarray`, o sea arreglos de datos multidimensionales.\n", "\n", "¿Otra secuencia más? ¿pero que tenían de malo las listas?\n", "\n", "Las listas son geniales paro guardar **cualquier tipo de objeto**, pero esa flexibilidad las vuelve ineficientes cuando lo que queremos es almacenar datos homogéneos" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1000 loops, best of 3: 1.08 ms per loop\n" ] } ], "source": [ "%timeit [0.1*i for i in range(10000)] # %timeit es otra magia de ipython" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 13.32 times longer than the fastest. This could mean that an intermediate result is being cached \n", "10000 loops, best of 3: 38.2 µs per loop\n" ] } ], "source": [ "%timeit np.arange(0, 1000, .1) # arange es igual a range, pero soporta paso de tipo flotante y devuelve un array" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "1 loops, best of 3: 991 ms per loop\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%timeit -o\n", "X = range(10000000)\n", "Y = range(10000000)\n", "Z = [(x + y) for x,y in zip(X,Y)]" ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "10 loops, best of 3: 156 ms per loop\n" ] }, { "data": { "text/plain": [ "" ] }, "execution_count": 22, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%timeit -o\n", "X = np.arange(10000000)\n", "Y = np.arange(10000000)\n", "Z = X + Y" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "6.370105952818687" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "__.best / _.best" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Existen varias formas para inicializar nuevos arrays de numpy, por ejemplo desde" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- Listas o tuplas\n", "- Usando funciones dedicadas a generar arreglos numpy, como `arange`, `linspace`,`ones`, `zeros` etc.\n", "- Leyendo datos desde archivos" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([1, 2, 3, 4])" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v = np.array([1,2,3,4])\n", "v" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 2.],\n", " [ 3., 4.]])" ] }, "execution_count": 32, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# una matriz: el argumento de la función array function es una lista anidada de Python\n", "M = np.array([[1, 2],\n", " [3, 4.0]])\n", "M" ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(numpy.ndarray, numpy.ndarray)" ] }, "execution_count": 26, "metadata": {}, "output_type": "execute_result" } ], "source": [ "type(v), type(M)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Dimensiones, tamaño, tipo, forma\n", "\n", "Los ndarrays tienen distintos atributos. Por ejemplo" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(1, 2)" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.ndim, M.ndim # cantidad de dimensiones" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((4,), (2, 2))" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.shape, M.shape # tupla de \"forma\". len(v.shape) == v.ndim" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(4, 4)" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.size, M.size # cantidad de elementos." ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 3],\n", " [2, 4]])" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "M.T # transpuesta!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A diferencia de las listas, los *arrays* tambien **tienen un tipo homogéneo**" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(dtype('int64'), dtype('float64'))" ] }, "execution_count": 33, "metadata": {}, "output_type": "execute_result" } ], "source": [ "v.dtype, M.dtype #" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se puede definir explicitamente el tipo de datos del array" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "a float is required", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[1;32m----> 1\u001b[1;33m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0marray\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m2\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;36m3\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;34m'f'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mdtype\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mcomplex\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: a float is required" ] } ], "source": [ "np.array([[1, 2], [3, 4]], dtype=complex)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una gran ventaja del atributo `shape` es que podemos cambiarlo. Es decir, reacomodar la distrución de los elementos (por supuesto, sin perderlos en el camino)" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(12,)" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.arange(0, 12)\n", "A.shape" ] }, { "cell_type": "code", "execution_count": 42, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11]])" ] }, "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A.shape = 3, 4\n", "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El método `reshape` es otra manera de definir la forma de un array, generando uno nuevo array (a diferencia de `A.shape` que simplemente es otra vista del mismo array)" ] }, { "cell_type": "code", "execution_count": 43, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11]])" ] }, "execution_count": 43, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.arange(12).reshape((3,4))\n", "A" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vistas\n", "\n", "Esto es porque numpy en general no mueve los elementos de la memoria y en cambio usa **vistas** para mostrar los elementos de distinta forma. Es importante entender esto porque incluso los slicings son vistas." ] }, { "cell_type": "code", "execution_count": 48, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.arange(10)\n", "a" ] }, { "cell_type": "code", "execution_count": 49, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 2, 4, 6, 8])" ] }, "execution_count": 49, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.arange(10)\n", "b = a[::2] # todo de 2 en 2\n", "b" ] }, { "cell_type": "code", "execution_count": 50, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([12, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 50, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b[0] = 12\n", "a # chan!!!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "En cambio" ] }, { "cell_type": "code", "execution_count": 51, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = np.arange(10)\n", "d = c[::2].copy()\n", "d[0] = 12\n", "c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una forma de saber si un array es \"base\" o hereda los datos de otro array (es una vista), es verificar el atributo `base`" ] }, { "cell_type": "code", "execution_count": 52, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 52, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b.base is a and a.base is None" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Otras funciones constructuras de arrays\n", "\n", "\n", "Además de `arange` hay otras funciones que devuelven arrays. Por ejemplo `linspace`, que a diferencia de `arange` no se da el tamaño del paso, sino la cantidad de puntos que queremos en el rango" ] }, { "cell_type": "code", "execution_count": 53, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0. , 0.06346652, 0.12693304, 0.19039955, 0.25386607,\n", " 0.31733259, 0.38079911, 0.44426563, 0.50773215, 0.57119866,\n", " 0.63466518, 0.6981317 , 0.76159822, 0.82506474, 0.88853126,\n", " 0.95199777, 1.01546429, 1.07893081, 1.14239733, 1.20586385,\n", " 1.26933037, 1.33279688, 1.3962634 , 1.45972992, 1.52319644,\n", " 1.58666296, 1.65012947, 1.71359599, 1.77706251, 1.84052903,\n", " 1.90399555, 1.96746207, 2.03092858, 2.0943951 , 2.15786162,\n", " 2.22132814, 2.28479466, 2.34826118, 2.41172769, 2.47519421,\n", " 2.53866073, 2.60212725, 2.66559377, 2.72906028, 2.7925268 ,\n", " 2.85599332, 2.91945984, 2.98292636, 3.04639288, 3.10985939,\n", " 3.17332591, 3.23679243, 3.30025895, 3.36372547, 3.42719199,\n", " 3.4906585 , 3.55412502, 3.61759154, 3.68105806, 3.74452458,\n", " 3.8079911 , 3.87145761, 3.93492413, 3.99839065, 4.06185717,\n", " 4.12532369, 4.1887902 , 4.25225672, 4.31572324, 4.37918976,\n", " 4.44265628, 4.5061228 , 4.56958931, 4.63305583, 4.69652235,\n", " 4.75998887, 4.82345539, 4.88692191, 4.95038842, 5.01385494,\n", " 5.07732146, 5.14078798, 5.2042545 , 5.26772102, 5.33118753,\n", " 5.39465405, 5.45812057, 5.52158709, 5.58505361, 5.64852012,\n", " 5.71198664, 5.77545316, 5.83891968, 5.9023862 , 5.96585272,\n", " 6.02931923, 6.09278575, 6.15625227, 6.21971879, 6.28318531])" ] }, "execution_count": 53, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.linspace(0, 2 * np.pi, 100) # por defecto, incluye el limite." ] }, { "cell_type": "code", "execution_count": 54, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "100" ] }, "execution_count": 54, "metadata": {}, "output_type": "execute_result" } ], "source": [ "_.size # en cualquier consola, python guarda el ultimo output en la variable _" ] }, { "cell_type": "code", "execution_count": 55, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 0., 0., 0., 0.]])" ] }, "execution_count": 55, "metadata": {}, "output_type": "execute_result" } ], "source": [ "matriz_de_ceros = np.zeros((4,6))\n", "matriz_de_ceros" ] }, { "cell_type": "code", "execution_count": 56, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 1., 1., 1.],\n", " [ 1., 1., 1., 1.]])" ] }, "execution_count": 56, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.ones((2, 4))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero numpy no sólo nos brinda los arrays. Los conceptos claves que aporta son *vectorización* y *broadcasting*" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Vectorización y funciones universales\n", "\n", "La **vectorización** define que las operaciones aritméticas entre arrays de igual forma se realizan implicitamente **elemento a elemento**, y por lo tanto hay una **ausencia de iteraciones explícitas y de indización**. \n", "La vectorización tiene muchas ventajas:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* El código vectorizado es más conciso y fácil de leer.\n", "* Menos líneas de código habitualmente implican menos errores.\n", "* El código se parece más a la notación matemática estándar (por lo que es más fácil,\n", "por lo general, corregir código asociado a construcciones matemáticas\n", "* La vectorización redunda en un código más \"pythónico\"" ] }, { "cell_type": "code", "execution_count": 57, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-3. , 0. , 3.4])" ] }, "execution_count": 57, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import numpy as np\n", "a = np.array([3, 4.3, 1])\n", "b = np.array([-1, 0, 3.4])\n", "c = a * b\n", "c" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para dar soporte a la vectorización, numpy reimplementa funciones matemáticas como \"funciones universales\", que son aquellas que funcionan tanto para escalares como para arrays" ] }, { "cell_type": "code", "execution_count": 58, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "only length-1 arrays can be converted to Python scalars", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 1\u001b[0m \u001b[1;32mimport\u001b[0m \u001b[0mmath\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 2\u001b[1;33m \u001b[0mmath\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0msin\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mTypeError\u001b[0m: only length-1 arrays can be converted to Python scalars" ] } ], "source": [ "import math\n", "math.sin(a)" ] }, { "cell_type": "code", "execution_count": 59, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.14112001, -0.91616594, 0.84147098])" ] }, "execution_count": 59, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sin(a)" ] }, { "cell_type": "code", "execution_count": 60, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "0.0" ] }, "execution_count": 60, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# y funciona para simples escalares\n", "np.sin(0)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "\n", "\n", "¡Basta de bucles for todos lados!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Broadcasting\n", "\n", "\n", "El **broadcasting** (*difusión*) es el otro concepto importante. Describe el **comportamiento de las operaciones con arrays de distinta forma**. Con ciertas restricciones, se trata de que el array de menores dimensiones se \"difunde\" al más grande, siempre que tengan formas compatibles\n", "\n", "En Numpy todas las operaciones adoptan por defecto un comportamiento de este tipo (no sólo las operaciones\n", "aritméticas sino las lógicas, las funcionales y las de nivel de bits)\n", "\n", "La forma más obvia de observar el broadcasting es cuando se opera un array con un escalar" ] }, { "cell_type": "code", "execution_count": 61, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 2., 4., 6.])" ] }, "execution_count": 61, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.array([1., 2., 3.])\n", "b = 2.\n", "a * b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "podemos interpretar que el escalar `b` es un array adimensional que \"se estira\" para ser compatible con las dimensiones de `a`\n", "\n", "![](files/img/image001.gif)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Regla general del broadcasting\n", "\n", " Dos arrays son compatibles para operar via *broadcasting* si sus dimensiones \n", " (de atrás hacia adelante) son iguales o alguna es 1. \n", "\n", "\n", "En otras palabras:\n", "\n", " Debe cumplirse que el `shape` de uno sea \"sufijo\" del `shape` del otro array (1 es comodin) \n" ] }, { "cell_type": "code", "execution_count": 62, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "((4, 3), (3,))" ] }, "execution_count": 62, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.array([[ 0.0, 0.0, 0.0],\n", " [10.0, 10.0, 10.0],\n", " [20.0, 20.0, 20.0],\n", " [30.0, 30.0, 30.0]])\n", "b = np.array([1.0, 2.0, 3.0])\n", "\n", "a.shape, b.shape # son compatibles para broadcasting" ] }, { "cell_type": "code", "execution_count": 63, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1., 2., 3.],\n", " [ 11., 12., 13.],\n", " [ 21., 22., 23.],\n", " [ 31., 32., 33.]])" ] }, "execution_count": 63, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](files/img/image002.gif)" ] }, { "cell_type": "code", "execution_count": 65, "metadata": { "collapsed": false }, "outputs": [ { "ename": "ValueError", "evalue": "operands could not be broadcast together with shapes (4,) (3,) ", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;31m#fails\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 5\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m+\u001b[0m \u001b[0mb\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[1;31mValueError\u001b[0m: operands could not be broadcast together with shapes (4,) (3,) " ] } ], "source": [ "a = np.array([0.0, 10.0, 20.0, 30.0])\n", "b = np.array([1.0, 2.0, 3.0])\n", "\n", "#fails\n", "a + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero podemos elevar la dimensionalidad de `a` (agregar una dimensión sin cambiar los elementos) para poder operar entre los dos arrays" ] }, { "cell_type": "code", "execution_count": 67, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 2.],\n", " [ 10., 11., 12.],\n", " [ 20., 21., 22.],\n", " [ 30., 31., 32.]])" ] }, "execution_count": 67, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = a.reshape((4,1)) # equivalente a a[:,np.newaxis]\n", "b = np.array([0.0, 1.0, 2.0])\n", "a + b" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](files/img/image004.gif)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicio\n", "\n", "1. Crear una array de 10x10 donde cada fila va del 0 al 9 (tip: implementar via broadcasting y también ver la función `np.tile`)\n", "2. Dado un vector `[0 20 32 100 123]` que indica las distancias entre los pueblos sobre una ruta, encontrar la \"matriz de distancias\" (que da la distancia absoluta entre cualquier par de pueblos)\n", "\n" ] }, { "cell_type": "code", "execution_count": 73, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9.]])" ] }, "execution_count": 73, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.ones((10, 10)) * np.arange(10)" ] }, { "cell_type": "code", "execution_count": 75, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n", " [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]])" ] }, "execution_count": 75, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.tile(np.arange(10), 10).reshape((10,10))" ] }, { "cell_type": "code", "execution_count": 70, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 35, 40, 60, 70],\n", " [35, 0, 5, 25, 35],\n", " [40, 5, 0, 20, 30],\n", " [60, 25, 20, 0, 10],\n", " [70, 35, 30, 10, 0]])" ] }, "execution_count": 70, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ruta = np.array([0, 35, 40, 60, 70])\n", "\n", "np.abs(ruta - ruta.reshape(ruta.size,1))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Slicing extendido" ] }, { "cell_type": "code", "execution_count": 77, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "El funcionamiento básico del indexado y el slicing funciona con `ndarrays` igual que con cualquier secuencia." ] }, { "cell_type": "code", "execution_count": 76, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ruido = np.random.random(1000) # 1000 numeros aleatorios entre [0, 1)" ] }, { "cell_type": "code", "execution_count": 78, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 78, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ruido[0] == ruido[-1000]" ] }, { "cell_type": "code", "execution_count": 79, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 79, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ruido[999] == ruido[-1]" ] }, { "cell_type": "code", "execution_count": 80, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.43760886, 0.86255503, 0.97694348, 0.95594497])" ] }, "execution_count": 80, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ruido[1:5]" ] }, { "cell_type": "code", "execution_count": 81, "metadata": { "collapsed": true }, "outputs": [], "source": [ "ruido[0:10] = np.zeros((10,)) # claro que los arrays son mutables!" ] }, { "cell_type": "code", "execution_count": 82, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 0.00000000e+00, 0.00000000e+00, 0.00000000e+00,\n", " 0.00000000e+00, 5.71360247e-01, 7.76374424e-01,\n", " 5.24283827e-01, 7.44727118e-01, 9.60821247e-01,\n", " 4.66316117e-01, 4.41502108e-01, 3.30996599e-04,\n", " 7.72040951e-01, 1.25332263e-02, 1.71393983e-01,\n", " 8.17819996e-01, 3.36185628e-01, 4.91193819e-03,\n", " 6.57807215e-01, 9.90611420e-01, 3.26871910e-01,\n", " 1.90268850e-01, 1.79921248e-01, 5.07157415e-01,\n", " 4.76731333e-02, 9.30680735e-01, 8.29399948e-01,\n", " 9.49006824e-01, 3.07500757e-01, 8.86812990e-01,\n", " 9.96494933e-01, 8.86081584e-01, 7.93895311e-01,\n", " 2.82447909e-01, 9.20229450e-01, 2.34296454e-01,\n", " 2.94541549e-01, 1.14515140e-01, 5.39715188e-01,\n", " 2.15519565e-01, 9.19664714e-01, 9.07329270e-01,\n", " 9.90562538e-01, 4.89832474e-01, 1.45673289e-01,\n", " 7.97621964e-01, 8.76627798e-01, 4.33040716e-01,\n", " 9.72108734e-01, 5.63180506e-01, 7.22339145e-02,\n", " 2.98084224e-01, 2.83617639e-01, 6.16905431e-02,\n", " 1.58750128e-01, 7.46605213e-01, 6.29434062e-01,\n", " 5.74034117e-01, 5.85940124e-01, 3.84601138e-01,\n", " 1.64994806e-01, 4.35881130e-01, 9.81488274e-01,\n", " 2.26478767e-01, 9.48275280e-01, 9.03878818e-02,\n", " 8.96752755e-01, 9.26416095e-01, 1.47970702e-01,\n", " 6.66725222e-01, 7.79832826e-01, 1.34974026e-01,\n", " 1.90621408e-03, 8.60727212e-01, 7.91636943e-01,\n", " 9.40641759e-01, 2.84071052e-01, 6.03138092e-01,\n", " 7.96821743e-01, 3.57610340e-01, 9.20415179e-02,\n", " 3.32350016e-01, 1.58317667e-01, 6.11319431e-01,\n", " 5.92338952e-01, 3.32454465e-01, 3.79716343e-01,\n", " 2.36860676e-01, 5.40631673e-01, 3.02765976e-01,\n", " 6.20953674e-01, 6.94021542e-01, 1.04025370e-01,\n", " 5.26215204e-01, 3.96538616e-01, 2.28653025e-01,\n", " 1.27556918e-01, 2.78148985e-01, 4.91609580e-01,\n", " 9.90678241e-01, 3.73473486e-01, 9.74886448e-01,\n", " 8.93953083e-02, 9.77793464e-01, 5.70968534e-01,\n", " 1.79802995e-01, 9.91302382e-01, 2.49035050e-02,\n", " 6.16641324e-01, 7.19949473e-01, 8.76332539e-01,\n", " 8.32800308e-02, 9.23121899e-01, 1.89792071e-01,\n", " 1.07511920e-01, 9.51026778e-01, 7.03787393e-01,\n", " 5.32369626e-01, 6.79152075e-01, 9.03726329e-01,\n", " 6.79613275e-01, 4.04080196e-01, 1.36383474e-01,\n", " 2.74137206e-01, 2.75532806e-01, 3.71039370e-01,\n", " 1.08904423e-01, 9.64097168e-02, 2.28284963e-01,\n", " 1.95189818e-01, 8.19252298e-01, 4.14808854e-01,\n", " 3.20756538e-01, 7.74288902e-01, 1.14969659e-01,\n", " 4.13060449e-02, 7.05372500e-02, 6.94087914e-01,\n", " 7.92541167e-01, 6.91854246e-01, 7.14225310e-01,\n", " 9.81155898e-01, 8.48668650e-01, 7.22318594e-01,\n", " 4.96099431e-01, 5.73182241e-01, 8.77290616e-01,\n", " 2.88677596e-02, 7.20689325e-01, 3.21457647e-01,\n", " 3.44272792e-01, 2.45888546e-01, 4.46705462e-01,\n", " 6.58860724e-01, 8.09363280e-01, 3.98607283e-01,\n", " 6.64704933e-01, 2.79742478e-01, 3.51310962e-01,\n", " 8.39449323e-01, 3.77785044e-01, 4.84786919e-01,\n", " 9.84745542e-01, 9.02590580e-01, 9.72400438e-01,\n", " 4.74753799e-01, 4.68429955e-01, 1.60925716e-01,\n", " 1.47981126e-01, 1.16505497e-01, 2.13242410e-01,\n", " 7.53233419e-01, 6.98475963e-01, 4.13596092e-03,\n", " 6.05538047e-01, 6.23588308e-01, 2.44554574e-01,\n", " 5.61443227e-01, 7.15471498e-01, 6.56853238e-01,\n", " 8.71094868e-01, 9.28336638e-01, 7.86366323e-01,\n", " 9.62055270e-01, 6.53693387e-01, 6.77138093e-01,\n", " 4.17253511e-01, 7.39426898e-01, 5.07180861e-01,\n", " 3.01714499e-01, 7.04179744e-01, 7.25650093e-01,\n", " 6.18280712e-01, 6.23184241e-01, 8.49436335e-01,\n", " 6.23006857e-01, 1.98750161e-01, 6.78470264e-01,\n", " 7.14202485e-01, 3.32525816e-01, 9.25157614e-01,\n", " 6.13759413e-02, 9.71668640e-01, 2.03363884e-01,\n", " 7.88018235e-01, 6.41555105e-01, 9.95321966e-01,\n", " 2.12346210e-01, 1.40833755e-01, 8.14381161e-01,\n", " 2.12148627e-02, 4.52234104e-02, 7.22371284e-01,\n", " 7.24315001e-01, 5.28686736e-01, 3.06927479e-01,\n", " 2.80055600e-01, 7.01040990e-01, 7.14135378e-01,\n", " 4.03802126e-01, 5.68509690e-01, 3.19264866e-01,\n", " 7.26163597e-01, 7.55783680e-02, 3.55339949e-01,\n", " 6.71896315e-02, 5.70396603e-01, 6.83757550e-01,\n", " 3.55548387e-01, 8.91550710e-01, 8.20079276e-01,\n", " 6.54298051e-01, 8.84088361e-01, 5.09505403e-02,\n", " 5.93742139e-01, 5.31025951e-01, 9.95116357e-01,\n", " 6.09850015e-01, 4.33593896e-01, 7.63397840e-01,\n", " 1.24619000e-01, 7.72288124e-01, 2.40957376e-01,\n", " 4.94877155e-01, 5.33848202e-01, 8.25789780e-01,\n", " 4.32960617e-01, 3.35214197e-01, 9.36023461e-01,\n", " 6.14352823e-01, 6.75124430e-01, 8.43796537e-01,\n", " 1.47365912e-01, 3.32783728e-01, 5.15973282e-01,\n", " 2.00637781e-01, 3.93961174e-01, 4.47698323e-01,\n", " 4.51317371e-01, 9.65964766e-01, 1.18203353e-01,\n", " 7.10298130e-01, 9.35435705e-01, 7.11567682e-01,\n", " 4.30014343e-01, 9.81398983e-01, 9.17723237e-01,\n", " 2.71380298e-01, 3.98299552e-01, 4.27068412e-01,\n", " 6.28527424e-01, 4.36229261e-01, 7.21666677e-01,\n", " 3.82017786e-01, 8.85426286e-01, 8.85613982e-01,\n", " 4.98058148e-01, 3.78013021e-01, 9.82012478e-01,\n", " 3.00621850e-01, 9.13661218e-01, 3.86115502e-01,\n", " 8.85198926e-01, 1.46721731e-01, 1.03605700e-01,\n", " 4.95415799e-01, 8.33505079e-01, 9.77018345e-01,\n", " 9.49024902e-03, 7.45322195e-01, 4.90607877e-02,\n", " 1.43856254e-01, 2.77782007e-01, 4.10535442e-01,\n", " 4.71808346e-01, 6.73226348e-03, 4.90583070e-01,\n", " 9.16549608e-01, 2.91184755e-01, 5.85190258e-01,\n", " 3.17456389e-01, 5.42444370e-01, 8.29343812e-01,\n", " 9.32556226e-02, 6.32143854e-01, 8.49173149e-02,\n", " 5.67654359e-01, 5.78875061e-01, 1.76338863e-01,\n", " 5.13205388e-01, 8.20680652e-01, 6.97274342e-02,\n", " 8.49951215e-01, 2.68577361e-01, 3.42728570e-01,\n", " 7.22650871e-01, 3.66933085e-01, 5.36586740e-02,\n", " 9.92599617e-01, 6.76592374e-02, 2.63891151e-01,\n", " 9.44955477e-01, 7.66221803e-01, 5.68442353e-01,\n", " 9.97258461e-01, 8.65697579e-01, 1.75131417e-01,\n", " 1.15358889e-01, 6.87929156e-01, 5.87453361e-01,\n", " 2.14366109e-01, 3.98148503e-01, 3.80362432e-01,\n", " 8.63748095e-01, 7.17928787e-02, 1.87197009e-01,\n", " 6.28970787e-01, 7.43862692e-01, 5.07417368e-01,\n", " 8.24369157e-01, 4.26390161e-01, 6.24095473e-01,\n", " 2.48839797e-01, 2.11917077e-01, 4.94351691e-01,\n", " 8.39310024e-01, 7.61308451e-02, 5.03008538e-01,\n", " 8.74113446e-01, 2.84543688e-02, 1.68287248e-01,\n", " 7.43230826e-01, 2.62278320e-01, 8.96697795e-01,\n", " 6.43299891e-01, 9.80483893e-01, 8.54434722e-01,\n", " 5.20521458e-03, 8.74402574e-01, 5.32874994e-01,\n", " 4.21731754e-01, 3.44340414e-01, 3.43734336e-01,\n", " 4.17701269e-01, 4.60780012e-01, 1.45597862e-01,\n", " 2.75850183e-01, 4.47374718e-01, 3.99710781e-01,\n", " 3.98702960e-01, 4.71980643e-01, 5.27496648e-01,\n", " 2.88656014e-01, 5.03961616e-01, 5.64094460e-02,\n", " 8.11723686e-01, 1.22940348e-02, 6.10868029e-01,\n", " 2.33435415e-01, 9.17545989e-01, 2.73464225e-01,\n", " 7.15961734e-01, 7.97674411e-01, 4.02598826e-01,\n", " 1.87388962e-01, 5.97364662e-01, 1.36685992e-01,\n", " 2.08912419e-01, 6.72385610e-01, 5.14572927e-01,\n", " 1.57665329e-01, 8.28207025e-01, 6.65515512e-01,\n", " 6.25263103e-01, 2.81310578e-01, 1.11258852e-01,\n", " 2.26700260e-01, 5.95914820e-01, 3.51069271e-01,\n", " 5.55708417e-01, 4.69273276e-01, 9.42579290e-01,\n", " 9.90252759e-01, 1.85337019e-01, 6.84496244e-01,\n", " 1.12991464e-01, 6.70868326e-01, 4.74113866e-01,\n", " 2.90689671e-01, 3.35164520e-02, 9.14957234e-01,\n", " 5.35206238e-01, 8.05627456e-01, 9.21772076e-01,\n", " 3.85311064e-01, 5.76525146e-01, 3.96443006e-01,\n", " 9.07156807e-01, 9.71825225e-02, 2.25661427e-01,\n", " 7.15909370e-01, 4.50126796e-01, 4.25527880e-01,\n", " 2.81859526e-01, 7.84760664e-01, 4.92384700e-01,\n", " 4.38517251e-01, 2.52090993e-01, 9.85543681e-01,\n", " 6.87020131e-01, 5.26605294e-02, 4.35551498e-01,\n", " 6.16532567e-02, 8.05494249e-01, 4.65513116e-01,\n", " 8.78937348e-01, 9.92748005e-01, 4.53535272e-01,\n", " 1.52005332e-01, 8.09217849e-01, 4.68559285e-01,\n", " 7.67311076e-01, 3.93424592e-01, 8.71168945e-01,\n", " 6.97388856e-01, 4.89345016e-01, 5.85363332e-01,\n", " 8.47145122e-01, 4.02687640e-01, 8.77646468e-01,\n", " 2.51823196e-01, 4.32490208e-01, 5.78034583e-01,\n", " 8.35746512e-01, 7.69915693e-01, 9.23624424e-01,\n", " 6.26100359e-01, 9.54605004e-01, 8.09475378e-01,\n", " 2.13552401e-01, 4.36338757e-01, 6.28464474e-01,\n", " 8.54134402e-01, 9.56966935e-01, 7.44590718e-01,\n", " 5.25870801e-01, 3.44810567e-01, 7.25252607e-01,\n", " 4.63605115e-01, 3.06592039e-01, 2.54312373e-01,\n", " 4.49329156e-01, 7.00257897e-01, 1.45040616e-01,\n", " 6.75504395e-01, 8.27471245e-01, 1.69096171e-01,\n", " 5.27663190e-01, 4.99134967e-01, 8.78532650e-01,\n", " 2.78330460e-01, 1.20369954e-01, 2.87177719e-01,\n", " 5.45803776e-01, 8.21571571e-03, 7.06004158e-01,\n", " 7.84353941e-01, 8.17271732e-01, 5.25746146e-01,\n", " 5.74965292e-01, 9.16142532e-01, 4.51616510e-01,\n", " 3.81953837e-01, 8.48300683e-01, 7.57957894e-01,\n", " 9.80901705e-01, 3.10242216e-01, 4.50881713e-01,\n", " 8.45736460e-01, 4.22232544e-01, 4.90976135e-01,\n", " 1.50502168e-01, 1.58867114e-02, 8.53844027e-01,\n", " 4.11519012e-01, 9.54385055e-01, 4.34855509e-01,\n", " 6.48641186e-01, 5.28405690e-01, 6.80993769e-01,\n", " 8.69722341e-03, 7.69037137e-01, 2.50132169e-01,\n", " 1.66799454e-01, 9.08001868e-01, 7.90756143e-01,\n", " 6.87837516e-01, 6.61850066e-01, 6.48309166e-01,\n", " 1.36410334e-01, 1.39791429e-02, 3.95951340e-01,\n", " 5.07007246e-01, 9.01002840e-01, 8.48855182e-01,\n", " 9.21638877e-01, 7.54714394e-01, 5.42660228e-01,\n", " 8.73356487e-02, 3.52387061e-01, 4.63438512e-01,\n", " 4.24371708e-01, 7.89190795e-01, 4.36668422e-02,\n", " 8.24195118e-02, 6.45535004e-01, 7.13329789e-01,\n", " 6.31600777e-01, 3.90604906e-01, 4.65793742e-01,\n", " 5.21166811e-01, 2.63291446e-01, 2.99184306e-01,\n", " 5.79650113e-02, 5.19631561e-01, 9.28867455e-01,\n", " 2.97793313e-01, 7.34836857e-01, 7.05416721e-01,\n", " 6.18782621e-02, 5.76078803e-01, 6.80198912e-01,\n", " 7.60157195e-01, 8.46377601e-01, 6.75391151e-01,\n", " 1.89877438e-01, 4.94032967e-01, 9.91633268e-03,\n", " 9.50133827e-01, 3.21386806e-01, 1.71341060e-01,\n", " 6.62507552e-01, 3.45270539e-01, 9.09434798e-01,\n", " 6.87527132e-01, 8.17691987e-01, 1.56406690e-01,\n", " 3.15424044e-01, 5.96739745e-01, 5.46860100e-01,\n", " 9.69923247e-01, 9.82519396e-01, 8.45474684e-01,\n", " 7.13167009e-01, 3.57637761e-01, 6.63932063e-01,\n", " 8.96333693e-02, 5.64686742e-01, 2.98659965e-01,\n", " 1.78491723e-01, 6.50394223e-02, 7.96747728e-02,\n", " 6.92957052e-01, 7.01547748e-01, 5.64966564e-01,\n", " 6.75374486e-01, 1.36319855e-01, 7.04678897e-01,\n", " 9.14121280e-01, 8.73504331e-01, 4.84408396e-01,\n", " 6.43685332e-01, 4.82161628e-02, 4.58501103e-01,\n", " 4.49753749e-01, 1.66890186e-01, 6.42460428e-01,\n", " 5.03648842e-01, 2.84295982e-01, 9.19451227e-01,\n", " 2.59935451e-01, 5.09560911e-01, 1.22218546e-01,\n", " 1.85478389e-01, 3.11265134e-01, 4.26868053e-02,\n", " 2.89917890e-01, 1.38434185e-01, 6.82597783e-01,\n", " 4.60527507e-01, 3.73365129e-01, 6.55980779e-01,\n", " 3.36221970e-01, 9.30066572e-02, 5.48178252e-01,\n", " 9.26258468e-02, 2.91370994e-01, 2.87507779e-01,\n", " 1.56937636e-01, 8.09478050e-01, 3.65050321e-01,\n", " 2.16839073e-01, 2.30167225e-02, 8.73869157e-01,\n", " 8.56812345e-01, 7.58148143e-01, 3.79458682e-01,\n", " 2.86281468e-01, 9.19196747e-01, 9.13809998e-01,\n", " 3.11761936e-01, 2.68997768e-01, 9.43578753e-01,\n", " 9.61316969e-01, 8.95999931e-01, 2.64494651e-01,\n", " 8.19555764e-01, 2.99874286e-01, 5.55696595e-01,\n", " 5.51582582e-01, 9.97061182e-01, 8.88084419e-01,\n", " 7.19009532e-01, 7.91996992e-01, 5.80820108e-01,\n", " 5.90000239e-01, 4.12188017e-01, 4.70659425e-01,\n", " 6.45740503e-01, 5.32375114e-01, 8.99933417e-01,\n", " 9.05153205e-01, 6.06762571e-01, 3.49680207e-01,\n", " 9.58380359e-01, 2.55815123e-01, 8.45381673e-01,\n", " 5.90694877e-01, 5.26901358e-01, 1.71898401e-01,\n", " 6.79540980e-01, 1.72831702e-01, 7.07501867e-01,\n", " 1.16180810e-01, 5.30428257e-01, 5.48940234e-01,\n", " 2.13542574e-01, 1.97963516e-01, 3.43440896e-01,\n", " 3.59803384e-01, 5.83200387e-01, 1.56813189e-01,\n", " 7.74676870e-01, 2.26692986e-01, 2.34740978e-01,\n", " 9.91221683e-01, 4.61764185e-02, 6.46205791e-01,\n", " 5.62457005e-03, 6.23401641e-01, 7.14207262e-01,\n", " 2.77313660e-01, 9.11166687e-01, 8.11642975e-01,\n", " 8.03895400e-01, 3.22813893e-02, 8.45860219e-01,\n", " 4.51918036e-01, 6.12578096e-01, 5.12853957e-01,\n", " 5.95198932e-01, 9.93384233e-01, 3.28359977e-01,\n", " 1.45312324e-02, 2.26389805e-01, 5.03510811e-01,\n", " 9.12548430e-01, 6.51288922e-01, 7.69987708e-01,\n", " 5.36043535e-01, 5.29423725e-01, 2.92686587e-01,\n", " 7.26680281e-01, 7.33533144e-01, 4.30259422e-02,\n", " 9.09084918e-01, 3.86916765e-01, 7.28583085e-02,\n", " 3.39046393e-01, 6.34925941e-01, 6.14428446e-01,\n", " 4.60748186e-01, 4.72352338e-01, 7.29207820e-01,\n", " 2.41028426e-01, 8.66447617e-01, 1.09521690e-01,\n", " 5.28342680e-01, 4.35877548e-01, 9.53401792e-01,\n", " 3.54998480e-01, 8.36732288e-01, 4.32158577e-01,\n", " 7.14307282e-01, 7.84875755e-01, 6.60660549e-01,\n", " 1.09120862e-01, 7.54087266e-01, 5.30164057e-01,\n", " 7.22136922e-01, 1.00529173e-03, 3.25810118e-01,\n", " 3.91804741e-01, 2.65093594e-01, 7.57861819e-01,\n", " 5.24698435e-01, 6.12802060e-01, 2.54318784e-01,\n", " 8.65003496e-01, 5.53757898e-01, 8.95143981e-01,\n", " 6.72022633e-01, 3.01173162e-01, 7.38609693e-01,\n", " 9.96954107e-01, 9.61526371e-01, 9.18228713e-01,\n", " 1.80827641e-01, 9.50015900e-01, 3.64117784e-01,\n", " 4.89710362e-01, 2.56859756e-01, 6.90802339e-01,\n", " 5.06189289e-01, 2.99264895e-01, 6.90914859e-01,\n", " 4.83832557e-01, 5.46786471e-01, 9.41333499e-01,\n", " 7.68986711e-01, 7.06222889e-01, 8.62524495e-01,\n", " 6.89308594e-01, 2.64688687e-01, 5.47356010e-01,\n", " 8.37811877e-01, 7.47959246e-01, 3.38246172e-01,\n", " 1.34770563e-01, 2.38824193e-01, 4.85235259e-01,\n", " 8.68680942e-01, 4.84435580e-01, 6.88664480e-01,\n", " 3.32967720e-01, 4.17840219e-01, 3.45853550e-01,\n", " 1.56937822e-01, 9.17297398e-01, 1.02315833e-01,\n", " 8.97777116e-01, 8.18147401e-01, 9.48111786e-01,\n", " 3.19265268e-01, 7.27200450e-02, 5.86025054e-01,\n", " 3.77295281e-01, 7.69044619e-02, 1.75967187e-01,\n", " 5.87002064e-01, 6.20507191e-02, 6.42934760e-01,\n", " 6.47809013e-01, 7.81717991e-01, 4.08219272e-01,\n", " 8.75567911e-01, 5.91350753e-01, 1.95079148e-01,\n", " 6.57733808e-01, 9.21521065e-01, 6.91885838e-01,\n", " 4.61936291e-01, 8.93375871e-01, 3.29390379e-01,\n", " 5.73574446e-02, 1.69746322e-01, 4.60745925e-01,\n", " 1.26369081e-01, 1.69036546e-01, 5.10085093e-01,\n", " 4.91487442e-02, 6.99436395e-01, 2.74367166e-01,\n", " 6.97946303e-02, 7.61051907e-01, 2.48994281e-02,\n", " 5.10962060e-01, 5.10546027e-01, 1.53899392e-01,\n", " 5.64430863e-01, 2.77631005e-01, 8.84110581e-01,\n", " 8.53804130e-01, 2.57403833e-01, 3.45498628e-01,\n", " 5.72845112e-01, 1.22519637e-01, 4.27624514e-01,\n", " 3.07474534e-03, 2.38604086e-01, 4.06237212e-02,\n", " 1.14165803e-01, 7.76618815e-01, 8.03504439e-01,\n", " 1.00412141e-02, 2.11350821e-01, 2.83319397e-01,\n", " 4.19831363e-01, 3.60187916e-01, 4.49055200e-01,\n", " 1.39549294e-01, 1.37202126e-01, 9.76460458e-01,\n", " 5.89055757e-01, 9.49462577e-01, 8.40977677e-01,\n", " 1.02318305e-01, 1.10668484e-01, 9.69625924e-01,\n", " 5.70884168e-01, 5.14892943e-01, 9.94096306e-01,\n", " 9.42025615e-01, 4.31554167e-01, 7.94427790e-01,\n", " 1.67586136e-01, 7.30115984e-01, 6.61732479e-01,\n", " 3.87274213e-02, 4.31853812e-01, 3.47399169e-02,\n", " 4.72216422e-01, 4.10364287e-01, 3.28792856e-01,\n", " 2.62991562e-01, 4.72904666e-01, 9.17570076e-01,\n", " 8.92297914e-01, 3.73548476e-01, 4.50658495e-01,\n", " 4.24423307e-01, 7.74133832e-01, 2.85624170e-01,\n", " 7.22534011e-01, 2.75507137e-01, 9.85569886e-01,\n", " 3.15282209e-01, 4.40495171e-01, 7.86009804e-01,\n", " 6.27871264e-01, 6.69161217e-02, 8.29187245e-01,\n", " 8.05506006e-01, 8.47271074e-02, 2.65632535e-01,\n", " 4.28757498e-01, 1.69900748e-01, 9.37082755e-01,\n", " 4.97178718e-01, 9.89694856e-01, 9.41534395e-01,\n", " 3.86634075e-01, 2.29315955e-01, 7.58674917e-01,\n", " 3.59471566e-01, 3.78364881e-02, 9.94858476e-01,\n", " 6.83618073e-01, 5.63674667e-01, 4.17807390e-01,\n", " 3.75611171e-01, 6.73958365e-01, 7.75526780e-02,\n", " 6.45780958e-01, 1.32145482e-01, 1.09230841e-01,\n", " 7.73770366e-01, 4.50493803e-01, 2.16392086e-01,\n", " 9.73302286e-01, 2.87408417e-01, 8.91019961e-01,\n", " 5.76850461e-01, 9.41375803e-01, 5.57487482e-01,\n", " 5.79617799e-01, 6.58779675e-01, 3.66837520e-02,\n", " 8.92012019e-01, 3.98896086e-01, 9.45204311e-02,\n", " 3.13121470e-01, 9.00509538e-01, 8.58306322e-01,\n", " 8.88991670e-01, 7.23785548e-01, 2.59387193e-01,\n", " 7.82322033e-01, 4.46278273e-01, 5.99133538e-01,\n", " 3.18266559e-01, 7.03676797e-01, 7.96312273e-01,\n", " 3.06886799e-01, 1.34497042e-01, 9.01398111e-01,\n", " 1.19532481e-01, 4.50512939e-01, 8.76218908e-02,\n", " 2.32563801e-01, 4.97757950e-01, 3.87508834e-01,\n", " 6.85585133e-01, 3.60052088e-01, 2.97964316e-01,\n", " 5.11398447e-01, 3.97381331e-01, 2.41122601e-01,\n", " 7.85736514e-01, 2.98644460e-01, 1.09999419e-01,\n", " 6.11660339e-01, 2.45290853e-01, 3.31141044e-01,\n", " 6.46371577e-01, 6.35793109e-01, 2.88566199e-01,\n", " 9.67339183e-01, 9.59780384e-01, 1.20716476e-01,\n", " 8.64211105e-01, 3.24303293e-01, 2.46165529e-01,\n", " 8.71455572e-01, 2.52885998e-01, 2.37445949e-01,\n", " 5.28515886e-01, 5.48988502e-01, 3.62408315e-01,\n", " 3.25267517e-01, 2.98209820e-01, 5.30907136e-01,\n", " 2.78877782e-01, 9.05197087e-01, 9.31142159e-01,\n", " 4.81078257e-01, 4.69470228e-01, 3.82106163e-01,\n", " 3.60003918e-01, 8.91401504e-01, 1.07546923e-01,\n", " 7.50539595e-01, 9.62796550e-01, 5.82395841e-01,\n", " 9.38058809e-01, 6.39901503e-01, 8.32138266e-01,\n", " 5.56707702e-01, 5.66113758e-01, 5.57316386e-01,\n", " 3.47402908e-01, 9.62289850e-02, 9.22123223e-01,\n", " 6.41952081e-01])" ] }, "execution_count": 82, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ruido" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero veamos algo más. Supongamos que tenemos una matriz de 3x3" ] }, { "cell_type": "code", "execution_count": 83, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [3, 4, 5],\n", " [6, 7, 8]])" ] }, "execution_count": 83, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m = np.arange(0, 9).reshape(3,3)\n", "m" ] }, { "cell_type": "code", "execution_count": 84, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 1, 2])" ] }, "execution_count": 84, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m[0] # primer indice: filas" ] }, { "cell_type": "code", "execution_count": 85, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [3, 4, 5]])" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m[0:2]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero la sintaxis se extiende de una manera eficiente y compacta." ] }, { "cell_type": "code", "execution_count": 87, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "The slowest run took 66.75 times longer than the fastest. This could mean that an intermediate result is being cached \n", "1000000 loops, best of 3: 226 ns per loop\n" ] } ], "source": [ "%timeit m[1][1] # buuuuh!!!" ] }, { "cell_type": "markdown", "metadata": { "collapsed": false }, "source": [ "%timeit m[1,1] # yeaaaa!!!" ] }, { "cell_type": "code", "execution_count": 92, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1, 2],\n", " [3, 4, 5],\n", " [6, 7, 8]])" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m" ] }, { "cell_type": "code", "execution_count": 94, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([0, 3, 6])" ] }, "execution_count": 94, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m[:,0] # quiero la primer columna" ] }, { "cell_type": "code", "execution_count": 91, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 1],\n", " [3, 4]])" ] }, "execution_count": 91, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m[0:2, 0:2] # la submatriz superior izquierda de 2x2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Se acuerdan que en el slicing común había un tercer parametro opcional que era el paso? Funciona acá también" ] }, { "cell_type": "code", "execution_count": 93, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 2],\n", " [6, 8]])" ] }, "execution_count": 93, "metadata": {}, "output_type": "execute_result" } ], "source": [ "m[::2, ::2] # esquinas" ] }, { "cell_type": "code", "execution_count": 103, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3, 4, 5],\n", " [10, 11, 12, 13, 14, 15],\n", " [20, 21, 22, 23, 24, 25],\n", " [30, 31, 32, 33, 34, 35],\n", " [40, 41, 42, 43, 44, 45],\n", " [50, 51, 52, 53, 54, 55]])" ] }, "execution_count": 103, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.arange(60).reshape(6, 10)[:,:6]\n", "a" ] }, { "cell_type": "code", "execution_count": 96, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 2, 12, 22, 32, 42, 52])" ] }, "execution_count": 96, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[:,2]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a[:,2:3]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como resumen (corregir ejemplo rojo!)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](http://www.tp.umu.se/~nylen/pylect/_images/numpy_indexing.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicios\n", "\n", "1. Dado el array del gráfico (`np.arange(60).reshape(6, 10)[:,:6]`):\n", " \n", " 1.1 Obtener la segunda columna exceptuando el valor de la primera y la última fila\n", " \n", " 1.2 Obtener toda la submatriz central de 4x4 \n", " \n", " 1.3 \"Rodear\" el array con ceros (obteniendo una matriz de 8x8)\n", " \n", " 1.4 Reconfigurar la forma para que cada \"fila\" resultante se convierta en una matriz de 2x3\n", " \n", "2. Crear la estructura de datos de un [Cubo de Rubik](https://es.wikipedia.org/wiki/Cubo_de_Rubik) en su estado inicial: 6x3x3 donde cada una de las 6 \"caras\" *i* tiene todos sus elementos con valor *i*\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 106, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[ 0., 0., 0.],\n", " [ 0., 0., 0.],\n", " [ 0., 0., 0.]],\n", "\n", " [[ 1., 1., 1.],\n", " [ 1., 1., 1.],\n", " [ 1., 1., 1.]],\n", "\n", " [[ 2., 2., 2.],\n", " [ 2., 2., 2.],\n", " [ 2., 2., 2.]],\n", "\n", " [[ 3., 3., 3.],\n", " [ 3., 3., 3.],\n", " [ 3., 3., 3.]],\n", "\n", " [[ 4., 4., 4.],\n", " [ 4., 4., 4.],\n", " [ 4., 4., 4.]],\n", "\n", " [[ 5., 5., 5.],\n", " [ 5., 5., 5.],\n", " [ 5., 5., 5.]]])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# %load https://gist.githubusercontent.com/mgaitan/1c90f89c49927d329cb6/raw/6d1f1534e8aa692b64e92c4db193500c5a3a2c16/rubik.py\n", "np.zeros([6,3,3]) + np.arange(6)[:,np.newaxis, np.newaxis]" ] }, { "cell_type": "code", "execution_count": 111, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[[0]],\n", "\n", " [[1]],\n", "\n", " [[2]],\n", "\n", " [[3]],\n", "\n", " [[4]],\n", "\n", " [[5]]])" ] }, "execution_count": 111, "metadata": {}, "output_type": "execute_result" } ], "source": [ " np.arange(6)[:, np.newaxis, np.newaxis]" ] }, { "cell_type": "code", "execution_count": 104, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0., 0., 0., 0., 0., 0., 0., 0.],\n", " [ 0., 0., 1., 2., 3., 4., 5., 0.],\n", " [ 0., 10., 11., 12., 13., 14., 15., 0.],\n", " [ 0., 20., 21., 22., 23., 24., 25., 0.],\n", " [ 0., 30., 31., 32., 33., 34., 35., 0.],\n", " [ 0., 40., 41., 42., 43., 44., 45., 0.],\n", " [ 0., 50., 51., 52., 53., 54., 55., 0.],\n", " [ 0., 0., 0., 0., 0., 0., 0., 0.]])" ] }, "execution_count": 104, "metadata": {}, "output_type": "execute_result" } ], "source": [ "c = np.zeros((8,8))\n", "c[1:-1,1:-1] = a\n", "c" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "a = np.arange(60).reshape(6, 10)[:,:6]\n", "\n", "a[0::2,0::2]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.diag(1+np.arange(4),k=-1)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ " (tip: investigar la función `diag()` y `rot90()`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "aleatorio = np.random.normal?" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "aleatorio = np.random.normal" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.zeros((10,10)) + np.arange(10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Funciones de reducciones/agregación\n", "\n", "numpy tiene muchas funciones y/o métodos de \"reducción\", que sumarizan información del array. Por ejemplo: sumatoria, media, maximo y minimo, etc." ] }, { "cell_type": "code", "execution_count": 112, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "10" ] }, "execution_count": 112, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([1, 2, 3, 4])\n", "np.sum(x)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Las funciones más importantes también se implementan como métodos" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x.sum()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cuando tenemos un array de más de una dimensión podemos aplicar la función por ejes, a traves del parámetro `axis`\n", "\n", "![](files/img/reductions.png)" ] }, { "cell_type": "code", "execution_count": 114, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([2, 4])" ] }, "execution_count": 114, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.array([[1, 1], [2, 2]])\n", "x.sum(axis=1)" ] }, { "cell_type": "code", "execution_count": 121, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 2],\n", " [1, 2]])" ] }, "execution_count": 121, "metadata": {}, "output_type": "execute_result" } ], "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Funciones de transformación" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "La función `diag` poner un array 1D en diagonal (convirtiendolo en 2D) o bien extraer una diagonal de un array 2D dado." ] }, { "cell_type": "code", "execution_count": 123, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[1, 0, 0, 0, 0],\n", " [0, 2, 0, 0, 0],\n", " [0, 0, 3, 0, 0],\n", " [0, 0, 0, 4, 0],\n", " [0, 0, 0, 0, 4]])" ] }, "execution_count": 123, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag([1,2,3,4, 4])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos decirle qué diagonal con un offset entero" ] }, { "cell_type": "code", "execution_count": 125, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 0, 0, 0],\n", " [1, 0, 0, 0],\n", " [0, 2, 0, 0],\n", " [0, 0, 3, 0]])" ] }, "execution_count": 125, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag([1,2,3], k=-1)" ] }, { "cell_type": "code", "execution_count": 128, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0, 7, 14, 21, 28])" ] }, "execution_count": 128, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.diag(np.arange(30).reshape(5,6))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "`rot90` permite rotar un array multidimensional" ] }, { "cell_type": "code", "execution_count": 129, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0, 1, 2, 3],\n", " [ 4, 5, 6, 7],\n", " [ 8, 9, 10, 11]])" ] }, "execution_count": 129, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A" ] }, { "cell_type": "code", "execution_count": 130, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 3, 7, 11],\n", " [ 2, 6, 10],\n", " [ 1, 5, 9],\n", " [ 0, 4, 8]])" ] }, "execution_count": 130, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.rot90(A)" ] }, { "cell_type": "code", "execution_count": 131, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[11, 10, 9, 8],\n", " [ 7, 6, 5, 4],\n", " [ 3, 2, 1, 0]])" ] }, "execution_count": 131, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.rot90(A, k=2) # rotamos 180º" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejercicio \n", "\n", "\n", "1. Crear un array 2D de 6x5 de la siguiente forma\n", "\n", "\n", " array([[0, 0, 0, 0, 5],\n", " [0, 0, 0, 4, 0],\n", " [0, 0, 3, 0, 0],\n", " [0, 2, 0, 0, 0],\n", " [1, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0]])" ] }, { "cell_type": "code", "execution_count": 135, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[0, 0, 0, 0, 5],\n", " [0, 0, 0, 4, 0],\n", " [0, 0, 3, 0, 0],\n", " [0, 2, 0, 0, 0],\n", " [1, 0, 0, 0, 0],\n", " [0, 0, 0, 0, 0]])" ] }, "execution_count": 135, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.rot90(np.diag(np.arange(1,6), k=1))[:,:-1]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Meshgrids" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Una funcion importante es `meshgrid`, que permite crear una \"rejilla\" para definir dominios de más de una variable a partir de arrays unidemensionales. \n", "\n", "\n", "Por ejemplo, si quisieramos definir un dominio de $\\R3$ (x,y)" ] }, { "cell_type": "code", "execution_count": 136, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[ 0. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.] [ 2. 2.5 3. 3.5 4. 4.5 5. ]\n", "(7, 11) (7, 11)\n" ] }, { "data": { "text/plain": [ "[array([[ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.],\n", " [ 0., 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.]]),\n", " array([[ 2. , 2. , 2. , 2. , 2. , 2. , 2. , 2. , 2. , 2. , 2. ],\n", " [ 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5, 2.5],\n", " [ 3. , 3. , 3. , 3. , 3. , 3. , 3. , 3. , 3. , 3. , 3. ],\n", " [ 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5, 3.5],\n", " [ 4. , 4. , 4. , 4. , 4. , 4. , 4. , 4. , 4. , 4. , 4. ],\n", " [ 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5, 4.5],\n", " [ 5. , 5. , 5. , 5. , 5. , 5. , 5. , 5. , 5. , 5. , 5. ]])]" ] }, "execution_count": 136, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = np.linspace(0, 10, 11)\n", "y = np.linspace(2, 5, 7) \n", "print(x, y)\n", "grid = Xm, Ym = np.meshgrid(x, y)\n", "print(Xm.shape, Ym.shape)\n", "grid" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](img/meshgrid2.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Entonces podemos aplicar una función para este dominio, por ejemplo: $f(x,y) = (xy)^2$" ] }, { "cell_type": "code", "execution_count": 138, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 0. , 4. , 16. , 36. , 64. , 100. ,\n", " 144. , 196. , 256. , 324. , 400. ],\n", " [ 0. , 6.25, 25. , 56.25, 100. , 156.25,\n", " 225. , 306.25, 400. , 506.25, 625. ],\n", " [ 0. , 9. , 36. , 81. , 144. , 225. ,\n", " 324. , 441. , 576. , 729. , 900. ],\n", " [ 0. , 12.25, 49. , 110.25, 196. , 306.25,\n", " 441. , 600.25, 784. , 992.25, 1225. ],\n", " [ 0. , 16. , 64. , 144. , 256. , 400. ,\n", " 576. , 784. , 1024. , 1296. , 1600. ],\n", " [ 0. , 20.25, 81. , 182.25, 324. , 506.25,\n", " 729. , 992.25, 1296. , 1640.25, 2025. ],\n", " [ 0. , 25. , 100. , 225. , 400. , 625. ,\n", " 900. , 1225. , 1600. , 2025. , 2500. ]])" ] }, "execution_count": 138, "metadata": {}, "output_type": "execute_result" } ], "source": [ "z = (Xm * Ym) ** 2\n", "z" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "y graficamos, por ejemplo, las curvas de nivel" ] }, { "cell_type": "code", "execution_count": 139, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "pyplot.contourf(x, y, z)\n", "pyplot.colorbar();" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Ejercicio\n", "\n", "1. Basado en el ejemplo de [wireframe 3D](http://matplotlib.org/examples/mplot3d/wire3d_demo.html), graficar $z = xe^{-(x^2 + y^2)}$ con $x, y \\in [-2, 2]$ con una resolución de 100 puntos en cada eje\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 143, "metadata": { "collapsed": false }, "outputs": [], "source": [ "x = y = np.linspace(2, -2, 100)\n", "xx,yy = np.meshgrid(x, y)\n", "z = xx*np.exp(-(xx**2 + yy**2))" ] }, { "cell_type": "code", "execution_count": 147, "metadata": { "collapsed": false }, "outputs": [ { "ename": "AttributeError", "evalue": "'module' object has no attribute '_string_to_bool'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 4\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 5\u001b[0m \u001b[0mfig\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mplt\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigure\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 6\u001b[1;33m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_subplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m111\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mprojection\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'3d'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 7\u001b[0m \u001b[0max\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mplot_wireframe\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mxx\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0myy\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mz\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mrstride\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mcstride\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;36m10\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36madd_subplot\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 962\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 963\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 964\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msubplot_class_factory\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprojection_class\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 965\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 966\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_subplots.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, *args, **kwargs)\u001b[0m\n\u001b[0;32m 76\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 77\u001b[0m \u001b[1;31m# _axes_class is set in the subplot_class_factory\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 78\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axes_class\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigbox\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 79\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 80\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__reduce__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, rect, *args, **kwargs)\u001b[0m\n\u001b[0;32m 89\u001b[0m Axes.__init__(self, fig, rect,\n\u001b[0;32m 90\u001b[0m \u001b[0mframeon\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 91\u001b[1;33m *args, **kwargs)\n\u001b[0m\u001b[0;32m 92\u001b[0m \u001b[1;31m# Disable drawing of axes by base class\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[0mAxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_axis_off\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, rect, axisbg, frameon, sharex, sharey, label, xscale, yscale, **kwargs)\u001b[0m\n\u001b[0;32m 435\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_hold\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes.hold'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 436\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_connected\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;33m}\u001b[0m \u001b[1;31m# a dict from events to (id, func)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 437\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcla\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 438\u001b[0m \u001b[1;31m# funcs used to format x and y - fall back on major formatters\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 439\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfmt_xdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36mcla\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1043\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_zmargin\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1044\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1045\u001b[1;33m \u001b[0mAxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcla\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1046\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1047\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes3d.grid'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mcla\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 906\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcontainers\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 907\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 908\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_gridOn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwhich\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes.grid.which'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 909\u001b[0m props = font_manager.FontProperties(size=rcParams['axes.titlesize'],\n\u001b[0;32m 910\u001b[0m weight=rcParams['axes.titleweight'])\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36mgrid\u001b[1;34m(self, b, **kwargs)\u001b[0m\n\u001b[0;32m 1254\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1255\u001b[0m \u001b[0mb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1256\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_draw_grid\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmaxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_string_to_bool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1257\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1258\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mticklabel_format\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mAttributeError\u001b[0m: 'module' object has no attribute '_string_to_bool'" ] }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from mpl_toolkits.mplot3d import axes3d\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(111, projection='3d')\n", "ax.plot_wireframe(xx, yy, z, rstride=10, cstride=10)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Fancy indexing y máscaras" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Numpy permite indizar a través de una secuencia" ] }, { "cell_type": "code", "execution_count": 148, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([21, 27, 2, 27, 17, 7, 3, 5, 15, 7])" ] }, "execution_count": 148, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a = np.random.random_integers(0, 30, 10) # 10 enteros aleatorios entre [0, 30]\n", "a" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Esto se conoce como *fancy indexing*" ] }, { "cell_type": "code", "execution_count": 149, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([27, 2, 17, 27])" ] }, "execution_count": 149, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[[1, 2, 4, 1]] # selecciona el elemento 1, 2, el 4 y de nuevo el 1" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por otro lado, podemos indexar elementos a traves de un array (o cualquier secuencia array-like) de **tipo booleano**. Esto es, hacer una **máscara**" ] }, { "cell_type": "code", "execution_count": 150, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([21, 2, 27, 3])" ] }, "execution_count": 150, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[np.array([True, False, True, True, False, False, True, False, False])]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero por otro lado sabemos que via broadcasting podemos obtener un array booleano " ] }, { "cell_type": "code", "execution_count": 151, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ True, True, False, True, True, False, False, False, False, False], dtype=bool)" ] }, "execution_count": 151, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a > 15 # qué elementos de a son mayores a 10 ?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por lo tanto, podemos \"filtrar\" los valores que cumplan determinada condición en un array" ] }, { "cell_type": "code", "execution_count": 152, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([21, 27, 27, 17, 15])" ] }, "execution_count": 152, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[a > 10]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Más aun, podemos combinar condiciones a través de operadores lógicos" ] }, { "cell_type": "code", "execution_count": 153, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([21, 17, 15])" ] }, "execution_count": 153, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a[(a > 10) & (a < 25)]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "(Este tipo de slicing especial **crea copias**, no vistas. Usar cuando lo amerite.)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "Si en vez de los valores que cumplen una condición, queremos las posiciones, podemos usar la función `where`" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "np.where(a > 15) # devuelve las posiciones." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Además, la función where funciona como estructura ternaria a nivel arrays" ] }, { "cell_type": "code", "execution_count": 154, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([21, 27, 0, 27, 17, 0, 0, 0, 15, 0])" ] }, "execution_count": 154, "metadata": {}, "output_type": "execute_result" } ], "source": [ "b = 0\n", "# para cada i-elemento a[i] si True, si no b[i] (o constante)\n", "np.where(a > 10, a, b) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Ejemplos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "![](http://scipy-lectures.github.io/_images/numpy_fancy_indexing.png)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Lectura desde texto y archivos" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como numpy se especializa en manejar números, tiene muchas funciones para crear arrays a partir de información numérica a partir de texto o archivos (como los CSV, por ejemplo)." ] }, { "cell_type": "code", "execution_count": 155, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1. , 2.3, 3. , 4.1],\n", " [-3.1, 2. , 5. , 4.5]])" ] }, "execution_count": 155, "metadata": {}, "output_type": "execute_result" } ], "source": [ "a_desde_str = np.fromstring(\"\"\"1.0 2.3 3.0 4.1\n", "-3.1 2 5.0 4.5\"\"\", sep=\" \", dtype=float)\n", "a_desde_str.shape = (2, 4)\n", "a_desde_str" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Para cargar desde un archivo existe la función `loadtxt`. Por ejemplo tenemos el archivo `data/critical.dat` que es el resultado del cálculo de una linea crítica global para un sistema químico binario." ] }, { "cell_type": "code", "execution_count": 156, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "T(K) P(bar) d(mol/L) x(1)\r\n", " CRI\r\n", " 304.2100 73.8300 8.7568 0.000000 0.10000E+01\r\n", " 304.2056 73.8318 8.7570 0.000050 0.99995E+00 3 1\r\n", " 304.2011 73.8340 8.7572 0.000117 0.99988E+00 2 1\r\n", " 304.1920 73.8384 8.7577 0.000250 0.99975E+00 2 1\r\n", " 304.1740 73.8472 8.7586 0.000517 0.99948E+00 2 1\r\n", " 304.1379 73.8649 8.7604 0.001050 0.99895E+00 2 1\r\n", " 304.0657 73.9002 8.7640 0.002117 0.99788E+00 2 1\r\n", " 303.9211 73.9706 8.7711 0.004250 0.99575E+00 2 1\r\n" ] } ], "source": [ "!head data/critical.dat" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "np.loadtxt?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Vemos que el patrón es en columnas separadas por espacios en blanco y las dos primeras filas son headers" ] }, { "cell_type": "code", "execution_count": 157, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "(211, 4)" ] }, "execution_count": 157, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cri_data = np.loadtxt('data/critical.dat', skiprows=2, usecols=[0, 1, 2, 3])\n", "cri_data.shape" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Por defecto, devuelve una matriz 2D `numero_lineas` x `columnas`, o sea, la fila 0 es la primer linea de números" ] }, { "cell_type": "code", "execution_count": 158, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 304.21 , 304.2056, 304.2011, 304.192 , 304.174 , 304.1379,\n", " 304.0657, 303.9211, 303.6309, 303.2894, 302.9461, 302.6013,\n", " 302.2547, 301.9064, 301.5565, 301.2048, 300.8514, 300.4962,\n", " 300.1394, 299.7807, 299.4203, 299.0581, 298.6941, 298.3283,\n", " 297.9606, 297.5911, 297.2198, 296.8466, 296.4716, 296.0946,\n", " 295.7158, 295.335 , 294.9524, 294.5677, 294.1812, 293.7927,\n", " 293.4022, 293.0097, 292.6152, 292.2187, 291.8201, 291.4195,\n", " 291.0169, 290.6122, 290.2054, 289.7965, 289.3855, 288.9724,\n", " 288.5572, 288.1398, 287.7202, 287.2984, 286.8745, 286.4484,\n", " 286.02 , 285.5894, 285.1566, 284.7215, 284.2841, 283.8444,\n", " 283.4025, 282.9582, 282.5116, 282.0627, 281.6114, 281.1577,\n", " 280.7017, 280.2432, 279.7824, 279.3192, 278.8535, 278.3854,\n", " 277.9148, 277.4417, 276.9662, 276.4882, 276.0077, 275.5246,\n", " 275.0391, 274.551 , 274.0603, 273.5671, 273.0714, 272.573 ,\n", " 272.0721, 271.5686, 271.0625, 270.5537, 270.0424, 269.5284,\n", " 269.0117, 268.4925, 267.9705, 267.446 , 266.9187, 266.3888,\n", " 265.8562, 265.321 , 264.7831, 264.2425, 263.6992, 263.1532,\n", " 262.6045, 262.0532, 261.4991, 260.9424, 260.383 , 259.821 ,\n", " 259.2562, 258.6888, 258.1187, 257.546 , 256.9706, 256.3925,\n", " 255.8118, 255.2285, 254.6426, 254.0541, 253.4629, 252.8692,\n", " 252.2729, 251.6741, 251.0727, 250.4688, 249.8625, 249.2536,\n", " 248.6422, 248.0284, 247.4122, 246.7935, 246.1725, 245.5491,\n", " 244.9234, 244.2953, 243.665 , 243.0323, 242.3974, 241.7603,\n", " 241.121 , 240.4795, 239.8358, 239.19 , 238.542 , 237.892 ,\n", " 237.2398, 236.5856, 235.9294, 235.2711, 234.6108, 233.9484,\n", " 233.2841, 232.6178, 231.9494, 231.2791, 230.6067, 229.9324,\n", " 229.256 , 228.5776, 227.8971, 227.2145, 226.5299, 225.843 ,\n", " 225.154 , 224.4628, 223.7692, 223.0734, 222.3751, 221.6743,\n", " 220.971 , 220.265 , 219.5564, 218.8448, 218.1304, 217.4129,\n", " 216.6923, 215.9683, 215.2409, 214.51 , 213.7753, 213.0367,\n", " 212.2941, 211.5473, 210.7961, 210.0403, 209.2797, 208.5141,\n", " 207.7433, 206.967 , 206.1851, 205.3974, 204.6034, 203.8032,\n", " 202.9963, 202.1825, 201.3615, 200.5331, 199.697 , 198.8528,\n", " 198.0004, 197.1393, 196.2693, 195.3901, 194.5014, 193.6027,\n", " 192.6939, 191.7744, 190.8441, 190.7051, 190.6356, 190.6008,\n", " 190.564 ])" ] }, "execution_count": 158, "metadata": {}, "output_type": "execute_result" } ], "source": [ "cri_data[:, 0]" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si directamente queremos los vectores (las columnas), podemos pedir que \"desempaque\" las columnas" ] }, { "cell_type": "code", "execution_count": 159, "metadata": { "collapsed": true }, "outputs": [], "source": [ "t, p, d, x = np.loadtxt('data/critical.dat', skiprows=2, usecols=[0, 1, 2, 3], unpack=True) # o loadtxt().T" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "t" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "t.size" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos graficar algo sencillo" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "code", "execution_count": 160, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nWQAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot\n", "pyplot.plot(, p, 'r') # el tercer parámetro es el formato\n", "pyplot.title('Critical pressure vs temperature')\n", "pyplot.grid()\n", "pyplot.xlabel('Temperature [K]')\n", "pyplot.ylabel('Pressure [bar]')\n", "# el punto y coma evita el output\n", "pyplot.show();" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Otras herramientas de numpy\n", "\n", "ya mencionamos el subpaquete `numpy.random` que tiene funciones análogas a `random` de la biblioteca estándar, pero que construyen arrays \n", "\n", "\n", "Otras funciones y utilidades incorporadas en numpy\n" ] }, { "cell_type": "code", "execution_count": 166, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([-1.13600982+0.39307569j, 0.13600982-0.39307569j])" ] }, "execution_count": 166, "metadata": {}, "output_type": "execute_result" } ], "source": [ "## tanto trabajo con nuestra función \"baskara\" y ya estaba hecho!\n", "np.roots([2, 2, 1j])" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "# encima funciona para grado n\n", "np.roots([1j, -4+0.4j, 18, -np.pi, 0]) # polinomio de grado 5!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "De manera contraria, la función `poly` devuelve los coeficientes de un polinomio dadas sus raíces" ] }, { "cell_type": "code", "execution_count": 165, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.+0.j, 0.-1.j, -4.+0.j, 0.+4.j])" ] }, "execution_count": 165, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.poly([-2, 2, 1j])" ] }, { "cell_type": "code", "execution_count": 167, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 1.00000000e+00+0.j , 1.00000000e+00+0.j , 6.93254368e-09+0.5j])" ] }, "execution_count": 167, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.poly(np.array([-1.13600982+0.39307569j, 0.13600982-0.39307569j]))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podemos encontrar la inversa de una matriz" ] }, { "cell_type": "code", "execution_count": 168, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[-2. , 1. ],\n", " [ 1.5, -0.5]])" ] }, "execution_count": 168, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1,2],[3,4]])\n", "invA = np.linalg.inv(A)\n", "invA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "y calcular el producto punto" ] }, { "cell_type": "code", "execution_count": 169, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([[ 1.00000000e+00, 1.11022302e-16],\n", " [ 0.00000000e+00, 1.00000000e+00]])" ] }, "execution_count": 169, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.dot(A,invA) # equivalente A @ invA en py3.5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "que son las operaciones para resolver un sistema de ecuaciones lineales $Ax = b$\n" ] }, { "cell_type": "code", "execution_count": 170, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 6.13333333, -1.06666667])" ] }, "execution_count": 170, "metadata": {}, "output_type": "execute_result" } ], "source": [ "A = np.array([[1, 2], [0.5, -2]])\n", "b = np.array([4, 5.2])\n", "\n", "x = np.linalg.solve(A, b)\n", "x" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ejercicios\n", "\n", "- Graficar el polinomio con raices en -4., 2. y -1. entre [-5, 3]\n", "\n", "\n", "\n", "\n", "- Resuelva el siguiente sistema de ecuaciones\n", "\n", " $$\\begin{array} - -x + z = -2\\\\ 2x - y + z = 1 \\\\ -3x + 2y -2z = -1 \\end{array}$$" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Matplolib orientado a objeto\n", "\n", "\n", "Hasta ahora hemos usado `pyplot`, el módulo de `matptlotlib` que emula la forma de uso (la API) de Matlab. En este modo cada función que invocamos **afecta un estado interno** en el que podemos ir \"acumulando\" cambios (por ejemplo, el título, la etiqueta de los ejes, etc)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Este tipo de funcionamiento es práctico y fácil, pero limitado, porque es totalmente \"lineal\" (procedural) . Para mejorar las prestaciones y la posibilidad de \"tocar\" todo lo que queramos, tenemos que usar el **modo \"orientado a objetos\"**. Este modo es un poco más verborrágico pero también más explícito y potente. En general se usa una mezcla entre la \"practicidad\" de `pyplot` (modo procedural) y la orientación a objetos. Veamos un ejemplo" ] }, { "cell_type": "code", "execution_count": 171, "metadata": { "collapsed": false }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "\n", "\n", "\n" ] }, { "data": { "image/png": "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\n5OXMu7v5eZ/4BHDnncEn/003AX/918XfiUovLjbE3MSZu9vn7AR1zsuiCeoE3bnTu7IhD5k5ULpv\nNm3imMstMkeOsCDPnz988jMTMQ8rTbQxaAgArr0WOP300seCxNyvmsXEmQPeYp6WM9+8mSvHTOMQ\nNzYyc6DKnTkQPTf3yozduXlWYt7QwI7x+98HvvhFXqbLa3DXsmXAhReWPublzPVn/dSngF/+kj+X\n38l/883DO32dddw2nfnYsZyDO2899eRXbqds4sz9LoBhzjxqaWLczFxXIYQ588bG4SLT2srfmdeo\n3Lw4c4BnDHTOFAiYxSy6jTr/dmfmQDH7D3Pmppl5VGe+YUP8iAVIJzMXZw7vq7c7N8+qmoWIRXz3\nbnbd06cX824nzz7LE3Y58XLmWsxPPplru3/1q2gj2JziYcuZ6+lr3e7cb3Sdc+CQuzQRiO/M43SA\nxnXmhw9zBYV7iLnbmb/97WxMnANtnMbC+VmVstMBasuZe2FSzVJby2Km94OfMwfsOfOoYp6kLBGw\nH7PkaW4Wq9hw5k4xP3KERSbq7IC2+M53ij/v2MF1s0NDpUKwbBkvEeYkyJkDvODv3/0d8P73m7fF\ntpi3tABnncU/azHXQuVXVhbXmSvl78x1zDI0ZH5SjB/PJ15fHwtzFLwESm9Tf2ebN3NMMXEif05t\nJlpavMW8p4c7AYPaUk5n7kWYmOs5iLSDHz/ePzOvqSn97pNk5iefzP1IpmzcyJOXxcVGnTnAmrRz\npzjzN/GLWbSYt7TwQeg3UU85mT+fv0Bn7fGBA3wr7s4n/Q5u/Vk/9CE+aKI6cy0eNp05MFxovL4X\ngE/47dv5Iusl5n7OvKODv0OvbcYpTSQym6PbC781NvV31tfHTvHYY4eXzTmdufPCFebKgfJm5l6Y\nxCzu53nFLA0NbNqc52QSZ37KKTyPjOmc+knKEgH7mXlVliYC8Zy5V8yiM/Os8nI/rryydEj28uW8\nwIV7zcagmEX//WMfixYfpeHM9b41jVnGjeM279zpL+ZeznzHDv9h3c4OUNNqFmB4bm6yGAjg78z1\nvtm6lYW8pmb4cHPnBdB54TIR8/HjuY1+pbu6/VHvNEwxqWYBSnNzv5jFGbEAycS8poY7m1euDH/u\n0BBHYEnEvKaGvwOveWqiZuYtLWxEohy3QeRKzONk5kExS97E/J3vLBVzr7wcCI9ZAODf/x245Rbz\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "t = x = np.arange(0, 10, 0.1)\n", "y = np.random.randn(t.size)\n", "\n", "fig = plt.figure() # con una funcion de pyplot creamos un objeto tipo Figure.\n", "print(type(fig))\n", "ax = fig.add_subplot(1, 1, 1) # en la posicion 1-1 creamos un Subplot en nuestro objeto fig (que tendrá solo un plot)\n", "print(type(ax))\n", "lines = ax.plot(t, y) # en ese objeto plot graficamos x vs y\n", "print(type(lines))\n", "t = ax.set_title('random numbers') # y al mismo plot le ponemos un titulo\n", "print(type(t))\n", "plt.show() # por ultimo mostramos el grafico" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Supongamos que queremos graficar muchas curvas en el mismo Subplot." ] }, { "cell_type": "code", "execution_count": 172, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEACAYAAABWLgY0AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzt3XuUVOWZ7/HvI4gmgjYGuXkBukEFby1eQI2ANMTLSVTW\neEaMRslyTSaTc+KgRuPENTKoS3pYS6OMmZlzRIN4wcMkGcZ4O9BIrYAnQREwhEgijVwUglwVtUGE\n9/yxq2oXTXd113Xffp+1etm7q6i9eap8eftXT72vOecQEZF4OiLoCxARkcrRIC8iEmMa5EVEYkyD\nvIhIjGmQFxGJMQ3yIiIxVvIgb2ZPmdlWM1uV87N/MrMPzGxF+uuKUs8jIiKFK8dM/udA60HcAY84\n585Nf71WhvOIiEiBSh7knXOLgV1t3GSlPraIiJSmkpn8D83sHTN70sxqKngeERFpR6UG+X8DBgH1\nwBbg4QqdR0RE8uhaiQd1zn2U+d7MZgK/bn0fM9OiOSIiRXDOdToOr8hM3sz65RxOAFa1dT/nnL6c\nY8qUKYFfQ1i+VAvVQrXI/1WokmfyZjYHGA30MrNNwBRgjJnV43XZvA/8bannibP169cHfQmhoVr4\nVAufalG8kgd559wNbfz4qVIfV0RESqdPvIbApEmTgr6E0FAtfKqFT7UonhWT8ZTlxGYuqHOLiESV\nmeGCfuO1FGamrxB+VUsqlaraucJOtfCpFsWrSAtlqTTDD5dqDvIiUl6hi2vSv4oEcEXSHj0nIuER\n+bhGRETKR4O8hIqyV59q4VMtiqdBXkQkxpTJS4f0nIiEhzL5BFu5ciU/+tGPgr4MEQkRDfIR8rOf\n/azd2x555BHuv/9+duzYUcUrKj9lrz7VwqdaFE+DfIRs37693dvuuOMOrrnmmipejYhEQSg/DBVV\n69at44knnmj39pEjR1Z0II5Dbj5mzJigLyE0VAufalG8SA7y5foAZjFj4ubNm1m6dClz585lzpw5\nHDhwgIaGBlKpFLW1tUybNq3Tj/Xiiy/SpUsXFi9ezFlnncVrr73Gvffey+mnn174haFPporI4SI5\nyAc5YV2zZg0XXHABP/3pTwFYtmwZp5xySsGPs3HjRoYNG8bgwYO57777uOeeezjuuOMOeax3332X\n2bNnZ4+XLFnC3r17s8eXXnopV111VfY4DjP5VCqlWVuaauFTLYoXyUE+SGPHjuXBBx/kpptuAmDh\nwoVcfvnlQGFxTWYw37p1Kz169KCmpoZvfvObh9x/6NChh/xmMHXqVKZMmdLu42smLyKtaZAvwtKl\nS2lsbAS8QX7OnDkABcU1a9asYd++fSxfvpxRo0YB8MorrxwyMy9UHGbymq35VAufalE8DfJFmDBh\nAi+99BKLFi1ix44d9O7du+DHmD9/Pnv27KFfv37s3buXefPmcdJJJxV9TY8//jhz585l06ZNTJ06\nldtvv51jjz226McTkXjQJ14LtHDhQpqampg2bRpTp05lwIABVdu1Zvr06dx9991VOVeuaj4nyl59\nqoVPtfAV+olXzeQL1KtXL0477TSefvppBg0axM0331y1cwcxwItItGkmLx3ScyISHlq7RkREsjTI\nS6hojRKfauFTLYqnQV5EJMaUyUuH9JyIhIcyeRERydIgL6Gi7NWnWvhUi+JpkBcRiTFl8tIhPSci\n4aFMXkREsjTIB2jevHk89NBDNDY28swzz7R5n7q6Oo466ij69OlzyNrypXr++ed5+OGHuf7663nh\nhRfK9rilUvbqUy18qkXxtHZNQD7++GMeeOAB3n77bQAuuugirrzySnr16nXI/e655x4uv/xy+vfv\nT9eu5Xm61q5dy44dO7jzzjvZvn07Q4YMYcSIEQwaNKgsjy8i5XHgAKxYAb16wcCBxT2GZvIB+c1v\nfsOwYcOyx+eccw6LFi067H7dunXjlFNOKdsAD7B69WqmT58OeAuuDR48OPuPTdC00qBPtfAlpRbO\nQXMz/Pu/w3XXQe/ecMstsHp18Y+pmXwZFbIz1AcffEBNTU32tpqaGt57773D/sxbb73Fvn37+OST\nTzj11FO5+uqrS77Oq666ildffRXwNhrZsmULgwcPLvlxRaRw27fD66/DggXQ1AT79kFDA1x9NcyY\nAf37l/b4kRzkbWp5trlzUwrvGCnXRt67d+/m6KOPzh5369aNTz/99LD7NTQ0MGHCBADq6+sZNWoU\nNTU1JW0CfuSRR3LmmWcC8PLLL3P++edTX1/fqeuuNK0b7lMtfHGqRUsLLF7sDehNTd7MfdQoGDcO\nbr8dhg6Fcu7kGclBvpjBuVzKtZF3jx492LFjR/a4paWFPn36HHa/zMwfoGfPnqRSKYYPH87QoUMZ\nMmRIm5uAT58+nZaWljbPe8sttzAwHe7t3r2bWbNm8eyzzxZ8/SLSOZlcvanJm60vXQr19d6gPmMG\n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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure() # con una funcion de pyplot creamos un objeto tipo Figure.\n", "ax = fig.add_subplot(1, 1, 1) # en la posicion 1-1 creamos un Subplot en nuestro objeto fig (que tendrá solo un plot)\n", "\n", "\n", "ax.plot(x, x + 1, c='red', label=r'$y = x + 1$' ) # label usando LaTex\n", "ax.plot(x, .5*x - 2, c='green', label=r'$y = 0.5x - 2$' )\n", "ax.plot(x, -x, c='black', label=r'$y = -x$' )\n", "ax.grid()\n", "ax.legend(loc=\"upper left\")\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Pero también podemos tener una figura con múltiples subplots" ] }, { "cell_type": "code", "execution_count": 173, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nYdXIqzYAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "x = np.linspace(0, 2*np.pi, 100)\n", "fig = plt.figure()\n", "ax1 = fig.add_subplot(2, 1, 1) # el plot 1 en una figura de 2x1\n", "ax1.set_title('Seno')\n", "ax1.plot(x, np.sin(x), c='red')\n", "ax2 = fig.add_subplot(2, 1, 2) # el plot 2 en una figura de 2x1\n", "ax2.plot(x, np.cos(x), c='blue')\n", "ax2.set_title('Coseno')\n", "fig.tight_layout() # ajusta el espaciado entre los subplots\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Aunque ya la mostramos, todavia tenemos control sobre los objetos. Por ejemplo, podemos guardar la figura en un archivo" ] }, { "cell_type": "code", "execution_count": 174, "metadata": { "collapsed": true }, "outputs": [], "source": [ "fig.savefig('senos.png', format='png')" ] }, { "cell_type": "code", "execution_count": 175, "metadata": { "collapsed": true }, "outputs": [], "source": [ "!eog senos.png" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Otra manera de crear figuras con múltiples subplots es usar la función `subplots`. Por supuesto, cada gráfico puede ser de un tipo distinto" ] }, { "cell_type": "code", "execution_count": 177, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nREQkBirIRURERERERGKgglxEREREREQkBirIRURERERERGKgglxEREREREQkBirIRURERERERGLw\n/wO17ppPDUq23AAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "from matplotlib import pyplot as plt\n", "import numpy as np\n", "\n", "xx = np.linspace(-0.75, 1., 100)\n", "n = np.arange(0,6)\n", "\n", "# devuelve la figura y la lista de subplots\n", "fig, axes = plt.subplots(1, 5, figsize=(17,3))\n", "\n", "# scatter grafica puntos pero no los une\n", "axes[0].scatter(xx, xx + 0.25, c='red', marker='^')\n", "\n", "axes[1].step(n, n**2, 'g', lw=2)\n", "\n", "axes[2].bar(n, n**2, align=\"center\", width=0.5, alpha=0.5)\n", "\n", "axes[3].fill_between(x, x**2, x**3, color=\"green\", alpha=0.5);\n", "\n", "# ax = fig.add_subplot(1, 5, 5, projection='3d')\n", "# t = np.linspace(0, 2 *np.pi, 100)\n", "# ax.plot(t, t, t, color='blue', lw=3)\n", "pyplot.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Gráficos 3D\n", "\n", "Hacer gráficos en 3D no es el fin principal de matplotlib y por eso está en un toolkit aparte, pero es muy fácil. Primero hace falta importar la clase para el tipo Axes3D" ] }, { "cell_type": "code", "execution_count": 178, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from mpl_toolkits.mplot3d.axes3d import Axes3D" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Eso \"parcha\" la clase para que los subplot acepte la proyección 3D" ] }, { "cell_type": "code", "execution_count": 179, "metadata": { "collapsed": false }, "outputs": [ { "ename": "AttributeError", "evalue": "'module' object has no attribute '_string_to_bool'", "output_type": "error", "traceback": [ "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[1;31mAttributeError\u001b[0m Traceback (most recent call last)", "\u001b[1;32m\u001b[0m in \u001b[0;36m\u001b[1;34m()\u001b[0m\n\u001b[0;32m 2\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 3\u001b[0m \u001b[1;31m# `ax` is a 3D-aware axis instance, because of the projection='3d' keyword argument to add_subplot\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m----> 4\u001b[1;33m \u001b[0max\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd_subplot\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mprojection\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;34m'3d'\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 5\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 6\u001b[0m \u001b[0mtheta\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mlinspace\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m-\u001b[0m\u001b[1;36m4\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m4\u001b[0m \u001b[1;33m*\u001b[0m \u001b[0mnp\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mpi\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;36m1000\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/figure.py\u001b[0m in \u001b[0;36madd_subplot\u001b[1;34m(self, *args, **kwargs)\u001b[0m\n\u001b[0;32m 962\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mremove\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0max\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 963\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 964\u001b[1;33m \u001b[0ma\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0msubplot_class_factory\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mprojection_class\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m*\u001b[0m\u001b[0margs\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 965\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 966\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axstack\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0madd\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkey\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0ma\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_subplots.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, *args, **kwargs)\u001b[0m\n\u001b[0;32m 76\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 77\u001b[0m \u001b[1;31m# _axes_class is set in the subplot_class_factory\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 78\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_axes_class\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m__init__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mfig\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfigbox\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 79\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 80\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0m__reduce__\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, rect, *args, **kwargs)\u001b[0m\n\u001b[0;32m 89\u001b[0m Axes.__init__(self, fig, rect,\n\u001b[0;32m 90\u001b[0m \u001b[0mframeon\u001b[0m\u001b[1;33m=\u001b[0m\u001b[1;32mTrue\u001b[0m\u001b[1;33m,\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m---> 91\u001b[1;33m *args, **kwargs)\n\u001b[0m\u001b[0;32m 92\u001b[0m \u001b[1;31m# Disable drawing of axes by base class\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 93\u001b[0m \u001b[0mAxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mset_axis_off\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36m__init__\u001b[1;34m(self, fig, rect, axisbg, frameon, sharex, sharey, label, xscale, yscale, **kwargs)\u001b[0m\n\u001b[0;32m 435\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_hold\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes.hold'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 436\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_connected\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m{\u001b[0m\u001b[1;33m}\u001b[0m \u001b[1;31m# a dict from events to (id, func)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 437\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcla\u001b[0m\u001b[1;33m(\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 438\u001b[0m \u001b[1;31m# funcs used to format x and y - fall back on major formatters\u001b[0m\u001b[1;33m\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 439\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mfmt_xdata\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mNone\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36mcla\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 1043\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_zmargin\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;36m0\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1044\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1045\u001b[1;33m \u001b[0mAxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcla\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1046\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1047\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes3d.grid'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;32m/usr/local/lib/python3.4/dist-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mcla\u001b[1;34m(self)\u001b[0m\n\u001b[0;32m 906\u001b[0m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mcontainers\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;33m[\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 907\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m--> 908\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0mgrid\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_gridOn\u001b[0m\u001b[1;33m,\u001b[0m \u001b[0mwhich\u001b[0m\u001b[1;33m=\u001b[0m\u001b[0mrcParams\u001b[0m\u001b[1;33m[\u001b[0m\u001b[1;34m'axes.grid.which'\u001b[0m\u001b[1;33m]\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 909\u001b[0m props = font_manager.FontProperties(size=rcParams['axes.titlesize'],\n\u001b[0;32m 910\u001b[0m weight=rcParams['axes.titleweight'])\n", "\u001b[1;32m/usr/lib/python3/dist-packages/mpl_toolkits/mplot3d/axes3d.py\u001b[0m in \u001b[0;36mgrid\u001b[1;34m(self, b, **kwargs)\u001b[0m\n\u001b[0;32m 1254\u001b[0m \u001b[1;32mif\u001b[0m \u001b[0mlen\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1255\u001b[0m \u001b[0mb\u001b[0m \u001b[1;33m=\u001b[0m \u001b[1;32mTrue\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[1;32m-> 1256\u001b[1;33m \u001b[0mself\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_draw_grid\u001b[0m \u001b[1;33m=\u001b[0m \u001b[0mmaxes\u001b[0m\u001b[1;33m.\u001b[0m\u001b[0m_string_to_bool\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mb\u001b[0m\u001b[1;33m)\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0m\u001b[0;32m 1257\u001b[0m \u001b[1;33m\u001b[0m\u001b[0m\n\u001b[0;32m 1258\u001b[0m \u001b[1;32mdef\u001b[0m \u001b[0mticklabel_format\u001b[0m\u001b[1;33m(\u001b[0m\u001b[0mself\u001b[0m\u001b[1;33m,\u001b[0m \u001b[1;33m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[1;33m)\u001b[0m \u001b[1;33m:\u001b[0m\u001b[1;33m\u001b[0m\u001b[0m\n", "\u001b[1;31mAttributeError\u001b[0m: 'module' object has no attribute '_string_to_bool'" ] }, { "data": { "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "fig = plt.figure(figsize=(10,8))\n", "\n", "# `ax` is a 3D-aware axis instance, because of the projection='3d' keyword argument to add_subplot\n", "ax = fig.add_subplot(1, 1, 1, projection='3d')\n", "\n", "theta = np.linspace(-4 * np.pi, 4 * np.pi, 1000)\n", "z = np.linspace(-2, 2, 1000)\n", "r = z**2 + 1\n", "x = r * np.sin(theta)\n", "y = r * np.cos(theta)\n", "ax.plot(x,y,z, lw=1.5)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "¡Matplotlib es genial! Es libre y gratis y brinda resultados excepcionales. Seguro lo usarás para tu próximo paper/poster" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Para terminar... descontracturemos\n", "\n", "Hay un comic online que a los nerds nos gusta mucho: [XKCD](http://xkcd.com)\n", "\n", "\n", "![](http://imgs.xkcd.com/comics/compiling.png)\n", "\n", "![](http://www.attendly.com/wp-content/uploads/2012/09/computer_problems722.png)\n", "\n", "![](http://imgs.xkcd.com/comics/sandwich.png)\n", "\n", "\n", "Nos gusta tanto, que Python le rinde homenaje con un huevo de pascua\n", "\n", "\n" ] }, { "cell_type": "code", "execution_count": 180, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import antigravity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Muchas veces, la tira tiene gráficos de este estilo\n", "\n", "![](http://imgs.xkcd.com/comics/self_description.png)\n", "\n", "![](https://imgs.xkcd.com/comics/fiction_rule_of_thumb.png)\n", "\n", "![](https://imgs.xkcd.com/comics/i_dont_own_a_tv.png)\n", "\n", "Si intentáramos hacer nuestra propia versión, arruinaríamos el chiste" ] }, { "cell_type": "code", "execution_count": 181, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\nfED16mmf9rfyYxk+AB17JUMfP7Odk6sZQncxb/PXat/ah0x/wzB+C0M/2gb48wzfJLmeYbx9XYYY\n7joWU5wFLJvyFv4ghiGIK9rjc4AnM7zgzH2L5rLWphcC36iqn61Fm+bOzXUMnxm8I8k2v9DwYYz5\neOAm4IlrUf9Gy9BtqupHwJHAcUlenOSB7Ws0+yc5ui0WYJMkmyXZvE2bJflV4FkMnffJo+loFjfE\ncBjwrCljsSQ5OsmuSTZNsjXwGuCKqrppSj2fAL4PnJbkka39zwc+CBxVVavW5pgkWZ7kBUm2TrJJ\nkv0ZxmTnrohOBQ5P8vg2Zrsn8CqGD2kWvZnFzK+qyxnGZN80Y/k/YRizHj+xlzOE4PicHAi8YPSh\n0iynAq9K8utt3x4HHM78+/ZHwMFJHtG2/TGGF6i5be8NPDnJ+IPEcV/afMY7rfnGRI9huJr8WJKH\ntjoOBt7O6FhV1ZXAvzF8yPuVNq8YzuVd8xa53clzcxZwJUPfJMnhSZ6ZZIvWb5cDW3H3sfylq6qc\nRhPD279vArcyjIudATytlR0FrJ6YrgPeAnxzSl0PZ7jC3IXhSfiVUdnVDEE7uc6mwJ3ATu3xh4DL\ngVUMT5rPA4+fp/3bMoxx/ivDWOglwO9OLDN121PqOoDh60g/BH4EfBs4ZFSetu+Xt/LLgFeNyndu\n+7LJjPpXt+O8ajT9yehYnzix/F4MXxN7CMOwwbUT5W9q2zuE4StzP2F4izy53UsZvqUy9/hO4NFT\nlntVW/ZHwBXAm4HMtx7Dh2YfBX4G7Dqlzi8A7xvt/+T0u1PW+YVjMVG+I8O3O25sx/PrwIumLHcy\nw7DJtlOO2XMnztvqifOyCji8lX8ceNdE3QcxfB7xAOD3gG8xfLvkJoZ3WC9Y38/tDWVKO2CSpA4c\nXpCkjgxdSerI0JWkjgxdSepo3jtzkpQftEnSWpv5NT+vdCWpI0NXkjoydCWpI0NXkjoydCWpI0NX\nkjoydCWpI0NXkjoydCWpI0NXkjoydCWpI0NXkjoydCWpI0NXkjoydCWpI0NXkjoydCWpI0NXkjoy\ndCWpo3n/jzRJG55k5n+/tcHx/1j8RYaudJ90Xwiz+86LQ08OL0hSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4au\nJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk\n6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4au\nJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk\n6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4au\nJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk\n6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4au\nJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk\n6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4au\nJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk\n6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpSR4auJHVk6EpS\nR4auJHVk6EpSR4ZuRytWrFjfTZBmWLG+G7BkGLodGbracK1Y3w1YMgxdSerI0JWkjlJVswuT2YWS\npJmqKtPmzxu6kqRfLocXJKkjQ1eSOtpoQzfJw5KckuTKJN9K8oUkj21luyb5+yT/nOTyJP9rtN6h\n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\nAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "%matplotlib inline\n", "from matplotlib import pyplot as plt\n", "import numpy as np\n", "\n", "fig = plt.figure()\n", "ax = fig.add_subplot(1, 1, 1)\n", "ax.bar([-0.125, 1.0-0.125], [0, 100], 0.25)\n", "ax.spines['right'].set_color('none')\n", "ax.spines['top'].set_color('none')\n", "ax.xaxis.set_ticks_position('bottom')\n", "ax.set_xticks([0, 1])\n", "ax.set_xlim([-0.5, 1.5])\n", "ax.set_ylim([0, 110])\n", "ax.set_xticklabels(['CONFIRMED BY\\nEXPERIMENT', 'REFUTED BY\\nEXPERIMENT'])\n", "plt.yticks([])\n", "plt.title(\"CLAIMS OF SUPERNATURAL POWERS\");" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "¿Pero qué tal usar el modo XKCD de Matplotlib?\n" ] }, { "cell_type": "code", "execution_count": 182, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAV0AAAEXCAYAAAAOS5e9AAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAAIABJREFUeJzs3XeYU2X2B/BvepskkzKdQaqAgqiABRYUxYYdVxRB/Vmw\n4MoKiKywgiKKUleKDZS1gIIoIiqiC0hRsSBdkV5mYFommfR+fn9kc9fMJBl2l01u4Hyeh0fnJrk5\nubk5971vlRARgTHGWEZIsx0AY4ydTjjpMsZYBnHSZYyxDOKkyxhjGcRJlzHGMkie7QDELBqNQio9\n9a5LgUAAkUgEhw4dgsfjQUlJCcrKyiCRSP4n72ez2XDkyBFYLBaUl5cL71NfXw+3241du3ahsrIS\nKpUK7du3R48ePSCTyZr9DEql8n8Wc6ad6Lnmcrmwf/9+6PV6tG7d+n9+fvp8PtTU1ODgwYM4ePAg\nJBIJysvL0atXL6jV6v/pe5+yiBER0fr162nAgAHUv39/GjhwIHk8HjIajWSz2Zp97dGjR2nOnDnC\n34FAgG655Ra65JJLqG/fvnTjjTfSsGHDaM2aNcJz3nnnHRoyZIjwdzQapYsuuoiWLl3aZP+hUIgW\nLVpEI0eOpAkTJtC2bdvSxnPs2DF68MEHqUOHDtSlSxd69NFHac+ePcLjvXr1IgAJ/zp16kQOhyPl\nPn/44QcaP348jRw5kpYuXUrhcJiIiKZNm0abN29u8vxnnnmGNmzYQKFQiHQ6HZnNZpLJZNSnTx86\nfPgwERHdcccdBIAMBgN17tyZ2rVrR1KplF599VXavHkzqVQqslgs1Lt3b1qyZAlFo1Fh/xdddBE9\n+uijTd63qqqK2rZtS4FAoMljwWCQnn32WfL7/cK2V155hc4++2zq168fXXPNNXTFFVfQVVddRbfe\neivdf//9tHv3brrnnnua7MvlctGAAQMoEonQ8uXLSaFQUGFhIV1xxRX0j3/8I+VxJCJ6//33acuW\nLcLfbrebjEYj2e32tK8jIjrrrLPIaDSSUqmkLl260NatWxMer6iooKFDh1KHDh3onHPOoeHDh9Pe\nvXuJiMjr9VK7du3o0KFDwvPD4TANHTqU9u/fL2yLRqN02WWX0erVq2nKlCkEgNRqNXXq1Ik6duxI\nKpWKHnroIXI4HGQ2m8loNNJ5551HM2fOpFAo1CTmYDBI7777Lo0YMYKefvpp2r59e7Of81R26hXj\n/gOTJk3CVVddhYKCAigUCnz77bfw+XxoaGhAMBhM+9pIJIKBAwdizJgxiEQiAACZTIaLL74YV111\nFdauXQuj0Yi6ujrs27dPeN3cuXPx3nvvwePxAAD27t2LTZs2YfHixQn7r6ioQNeuXfG3v/0NEokE\nhw8fxpw5c1LG891336F9+/bYs2cPxo4di4cffhg7duxAz549YbfbAQBerxfPP/88nE4notEobDYb\nXn/9dRgMhib7IyIMGzYM1113HWpqahAOhzF//nwcPnwYALBs2TL88MMPTV73xRdfYPPmzQgEAvB4\nPDh69Cjsdjvat2+Pe++9FwCQl5eHu+66C3a7HTt27MDevXvhdDpx3333oaamBhqNBm+++SYuvvhi\n3HPPPfjLX/4i7N/r9WL27Nn47LPPEt7XaDSisrISmzZtahLT5MmT8dRTT+G7774Ttl1//fX405/+\nhEsuuQROpxNVVVX4wx/+gFatWkGhUODIkSNYsGABAoFAwr4qKyvx0UcfwePx4Pjx42jTpg1eeeUV\ntG/fHv3798fcuXOTfj8///wzBg8ejAULFiR8lhM51wCgrq4OGzduhNPpxM0334xbb70VoVAIAPDN\nN9/gzDPPxP79+zF27Fg89NBD2LZtG3r16gWHwwGNRgOFQoGFCxcK+1u6dCnmzZuHTz/9VNi2detW\nfP311+jYsSPy8vJw/vnnw+l04pdffsGvv/4Kp9OJGTNmwOfzob6+HnPnzsXAgQMxdepUXH/99cLv\nAACOHj2Krl27Yvbs2ZBKpTh48GDKY3PayHbWz7Zly5aRSqWir776ioiIPB4Pff7551RdXU0AqKam\nJu3rp02bRiUlJQSAdu/enfCY0+kkAHTw4MGE7YFAgBQKBQGgb7/9loiI5s+fTwCoS5cuCc8dOHAg\n3XzzzQmlvFTcbjeVl5fTyJEjE54fDAapbdu2NH/+fCIi6tatG7399tvN7o+IaPny5aTX6+n48eNJ\nHz///PPp5ZdfbrK9R48e9NJLL1F9fT0BEEpAR44cIYlEQpFIhB588EEaNmxY0v1+9913pNFohL93\n795NFouFVqxYQUREffv2pfPOO4+Kioqouro64bUdO3akl156KWHb1q1bSalUUklJCc2YMSPpe06c\nOJGuvfbahG3btm0jAAmlYyKinTt3EgByuVz0/vvvU8eOHYXHNm7cSHl5eU3uAAKBAHXu3JnKysqo\n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\nzZ07l8LhMI0ePZpsNhtt3LiRioqKaOPGjUREFIlEaNSoUfTggw+S3+8nANSiRQs6ePCgsK/PP/+c\nevXqRUREnTt3pj179iR9z2HDhtGrr75KNTU15Pf76YUXXqCxY8dSNBqlhQsX0plnnkk2m42IiL77\n7jsCQE8++SQREb3zzjsEgN5++20iItqwYQNdcsklSd+ntLSUtmzZQqNHj6b8/Hx68803kz7vySef\npOnTpxMR0dKlS+n6668nIqKnnnqKBgwYQERELpeLzGYzHT58+EQPLfsfGzduHD3//PMUjUZp/vz5\ndNZZZ5HT6aSjR49Sq1atkr6ma9eu9MsvvzTZXlpaShUVFQnbysvLE87v7du30znnnENEsd9DKBSi\nu+66ixYuXNhkf5999hldf/31tHbtWurbty917tyZDhw4kDQmi8VCLpeLotEoXXnllbRixQpyu93U\npk0bWrlyJRERzZ8/n6699toTOi6nklOypDtu3DjccccdGDZsGGQyGaZMmQKz2YznnnsOzz//PHr1\n6gUg1sp/5513Yt26dVCpVJDJZJg7dy4GDRokrGRaWFgolBYikQg2bNiAl19+GfPnz0+4QjscDqHl\nVKVSCbdsEokEd9xxB84//3x8+umnAIAtW7agoKAAP//8MwBg1apVaN26NX777TcAsQEHeXl58Hg8\n2L9/P7755hvU1dUBiHUds1qtmDJlCjZt2oSxY8dizZo1TY6B2+2GXq8HABw6dEjocz1u3Dhs3boV\n33zzDRYuXIhLL700obqBZVc0GoVMJoNEIsF9992HNm3a4KuvvoLH44FOp4Pf78ehQ4ewadMmVFRU\nCK/55ptvhPMy3R2Q2+1OmK7VbDYL07jGe714PB5otVrU1dVhx44d+O6770BEkMvlCIfDuPTSS7F6\n9Wrcdddd6N+/P8L/GoYm8Hq90Gq1CAaDOH78OCwWC3Q6HWbNmoXRo0cjGo3i5ZdfxqOPPnqSj6D4\nnXJJ1+FwYNmyZXjiiScStns8Hnz99dcYPHhwwna/3w+j0QgAUKvVuOGGG9C3b18MHz4cRASdTif0\nt4xEInjttdewdetWrF+/Hlu3bk3Yj1L5r7WrqqurIZfLsX37dsyZMwerV6/GhRdeCAD47rvv8OCD\nD2Lz5s0IhUJYtWoVxo4di19++QVAbGDKZ599BqvVissvvxwjR47Ejz/+CABC/1AA6NChA6ZOnYrp\n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\nfGiNifPb/gAAAABJRU5ErkJggg==\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "with plt.xkcd():\n", " fig = plt.figure()\n", " ax = fig.add_subplot(1, 1, 1)\n", " ax.bar([-0.125, 1.0-0.125], [0, 100], 0.25)\n", " ax.spines['right'].set_color('none')\n", " ax.spines['top'].set_color('none')\n", " ax.xaxis.set_ticks_position('bottom')\n", " ax.set_xticks([0, 1])\n", " ax.set_xlim([-0.5, 1.5])\n", " ax.set_ylim([0, 110])\n", " ax.set_xticklabels(['CONFIRMED BY\\nEXPERIMENT', 'REFUTED BY\\nEXPERIMENT'])\n", " plt.yticks([])\n", " plt.title(\"CLAIMS OF SUPERNATURAL POWERS\")" ] }, { "cell_type": "code", "execution_count": 183, "metadata": { "collapsed": false }, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "with plt.xkcd():\n", " labels = 'Frogs', 'Hogs', 'Dogs', 'Logs'\n", " sizes = [15, 30, 45, 10]\n", " colors = ['yellowgreen', 'gold', 'lightskyblue', 'lightcoral']\n", " explode = (0, 0.1, 0, 0) # only \"explode\" the 2nd slice (i.e. 'Hogs')\n", "\n", " plt.pie(sizes, explode=explode, labels=labels, colors=colors,\n", " autopct='%1.f%%', shadow=True, startangle=60)\n", " # Set aspect ratio to be equal so that pie is drawn as a circle.\n", " plt.axis('equal');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cualquier gráfico se puede \"xkcdear\" ;-). http://matplotlib.org/xkcd/" ] } ], "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.0" } }, "nbformat": 4, "nbformat_minor": 0 }