{ "metadata": { "name": "" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "heading", "level": 2, "metadata": {}, "source": [ "3. Numpy." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.1. Descripci\u00f3n." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Python tiene listas, enteros, punto flotante, etc. Para c\u00e1lculo num\u00e9rico necesitamos m\u00e1s... all\u00ed aparece Numpy.\n", "* Numpy es un paquete que provee a Python con arreglos multidimensionales de alta eficiencia y dise\u00f1ados para c\u00e1lculo cient\u00edfico.\n", "* Un array puede contener:\n", " * tiempos discretos de un experimento o simulaci\u00f3n. \n", " * se\u00f1ales grabadas por un instrumento de medida.\n", " * pixeles de una imagen, etc." ] }, { "cell_type": "code", "collapsed": false, "input": [ "%matplotlib inline" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 1 }, { "cell_type": "code", "collapsed": false, "input": [ "import numpy as np" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 2 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.2. El objeto arreglo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "* Los arreglos de NumPy son de tipado **est\u00e1tico** y **homog\u00e9neo**.\n", "* Son m\u00e1s eficientes en el uso de la memoria.\n", "* La funciones matem\u00e1ticas complejas y computacionalmente costosas (pj: la multiplicaci\u00f3n de matrices) son implementadas en lenguajes compilados como C o Fortran." ] }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.2.1. Creaci\u00f3n de arreglos unidimensionales." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A partir de una lista de Python:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "lista = [1, 2, 3, 4 , 5]" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 3 }, { "cell_type": "code", "collapsed": false, "input": [ "type(lista)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 4, "text": [ "list" ] } ], "prompt_number": 4 }, { "cell_type": "code", "collapsed": false, "input": [ "a = np.array(lista)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 5 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 6, "text": [ "array([1, 2, 3, 4, 5])" ] } ], "prompt_number": 6 }, { "cell_type": "code", "collapsed": false, "input": [ "type(a)" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 7, "text": [ "numpy.ndarray" ] } ], "prompt_number": 7 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Podemos conocer el tipo de datos a trav\u00e9s de `dtype`:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 8, "text": [ "dtype('int64')" ] } ], "prompt_number": 8 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Incluso podemos definir el tipo de dato al momento de la creaci\u00f3n de arreglo:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_complejo = np.array(lista, dtype=complex)" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 9 }, { "cell_type": "code", "collapsed": false, "input": [ "a_complejo" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 10, "text": [ "array([ 1.+0.j, 2.+0.j, 3.+0.j, 4.+0.j, 5.+0.j])" ] } ], "prompt_number": 10 }, { "cell_type": "code", "collapsed": false, "input": [ "a_complejo.dtype" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 11, "text": [ "dtype('complex128')" ] } ], "prompt_number": 11 }, { "cell_type": "markdown", "metadata": {}, "source": [ "o cambiar el tipo de dato:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a_no_mas_complejo = a_complejo.astype(np.int64)" ], "language": "python", "metadata": {}, "outputs": [ { "output_type": "stream", "stream": "stderr", "text": [ "-c:1: ComplexWarning: Casting complex values to real discards the imaginary part\n" ] } ], "prompt_number": 12 }, { "cell_type": "code", "collapsed": false, "input": [ "a_no_mas_complejo" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 13, "text": [ "array([1, 2, 3, 4, 5])" ] } ], "prompt_number": 13 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si queremos ver algunas caracter\u00edsticas del arreglo a:" ] }, { "cell_type": "code", "collapsed": false, "input": [ "a.ndim # dimensi\u00f3n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 14, "text": [ "1" ] } ], "prompt_number": 14 }, { "cell_type": "code", "collapsed": false, "input": [ "a.shape # 5 x 1" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 15, "text": [ "(5,)" ] } ], "prompt_number": 15 }, { "cell_type": "code", "collapsed": false, "input": [ "len(a) # elementos en la primera dimension" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 16, "text": [ "5" ] } ], "prompt_number": 16 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.2.2. Creaci\u00f3n de arreglos de 2 y 3 dimensiones." ] }, { "cell_type": "code", "collapsed": false, "input": [ "b = np.array([[0, 1, 2], [3, 4, 5]]) # arreglo 2 x 3" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 17 }, { "cell_type": "code", "collapsed": false, "input": [ "b" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 18, "text": [ "array([[0, 1, 2],\n", " [3, 4, 5]])" ] } ], "prompt_number": 18 }, { "cell_type": "code", "collapsed": false, "input": [ "b.ndim" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 19, "text": [ "2" ] } ], "prompt_number": 19 }, { "cell_type": "code", "collapsed": false, "input": [ "b.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 20, "text": [ "(2, 3)" ] } ], "prompt_number": 20 }, { "cell_type": "code", "collapsed": false, "input": [ "len(b) # elementos en la primera dimensi\u00f3n" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 21, "text": [ "2" ] } ], "prompt_number": 21 }, { "cell_type": "code", "collapsed": false, "input": [ "c = np.array([[[1], [2]], [[3], [4]]])" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 22 }, { "cell_type": "code", "collapsed": false, "input": [ "c" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 23, "text": [ "array([[[1],\n", " [2]],\n", "\n", " [[3],\n", " [4]]])" ] } ], "prompt_number": 23 }, { "cell_type": "code", "collapsed": false, "input": [ "c.shape" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 24, "text": [ "(2, 2, 1)" ] } ], "prompt_number": 24 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.2.3. Indexado." ] }, { "cell_type": "code", "collapsed": false, "input": [ "a = np.arange(10) # otra forma de generar un arreglo: a trav\u00e9s de funciones espec\u00edficas de numpy" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 25 }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 26, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 26 }, { "cell_type": "code", "collapsed": false, "input": [ "a[0], a[2], a[-1]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 27, "text": [ "(0, 2, 9)" ] } ], "prompt_number": 27 }, { "cell_type": "code", "collapsed": false, "input": [ "mis_indices = [0, 2, -1] # puedo listar \u00edndices" ], "language": "python", "metadata": {}, "outputs": [], "prompt_number": 28 }, { "cell_type": "code", "collapsed": false, "input": [ "a[mis_indices] # y luego indexar por esa lista (\"fancy indexing\")" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 29, "text": [ "array([0, 2, 9])" ] } ], "prompt_number": 29 }, { "cell_type": "heading", "level": 3, "metadata": {}, "source": [ "3.2.4. Cortes." ] }, { "cell_type": "code", "collapsed": false, "input": [ "a" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 30, "text": [ "array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])" ] } ], "prompt_number": 30 }, { "cell_type": "code", "collapsed": false, "input": [ "a[2:9] # corta en intervalos" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 31, "text": [ "array([2, 3, 4, 5, 6, 7, 8])" ] } ], "prompt_number": 31 }, { "cell_type": "code", "collapsed": false, "input": [ "a[2:9:3] # puedo especificar cada cu\u00e1nto cortar" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 32, "text": [ "array([2, 5, 8])" ] } ], "prompt_number": 32 }, { "cell_type": "code", "collapsed": false, "input": [ "a[::2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 33, "text": [ "array([0, 2, 4, 6, 8])" ] } ], "prompt_number": 33 }, { "cell_type": "code", "collapsed": false, "input": [ "a[3::2]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 34, "text": [ "array([3, 5, 7, 9])" ] } ], "prompt_number": 34 }, { "cell_type": "code", "collapsed": false, "input": [ "a[-2:]" ], "language": "python", "metadata": {}, "outputs": [ { "metadata": {}, "output_type": "pyout", "prompt_number": 35, "text": [ "array([8, 9])" ] } ], "prompt_number": 35 }, { "cell_type": "markdown", "metadata": {}, "source": [ "Un esquema siempre ayuda..." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "