{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "\"AeroPython\"" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Importando NumPy ...\n", "# ... y otras bibliotecas" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Python es un lenguaje que está altamente modularizado: está dividido en __bibliotecas que realizan tareas específicas__. Para hacer uso de ellas debemos importarlas. Podemos importar cosas de la [biblioteca estándar](https://docs.python.org/3.4/library/), de paquetes que hayamos descargado (o se enceuntren en [nuestra distribución](http://docs.continuum.io/anaconda/pkg-docs.html)) o de módulos que nosotros mismos construyamos. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `import ______` " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Existen varias formas de importar:\n", "\n", " import numpy\n", " \n", "Cada vez que queramos acceder a una función de numpy, deberemos escribir:\n", " \n", " numpy.sin(5)\n", " numpy.linspace(0,100,50)\n", " " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy" ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.2246467991473532e-16" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "numpy.sin(numpy.pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `import _____ as __` " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Como esto puede resultar tedioso, suele utilizarse un __namespace__, el recomendado en la documentación oficial y que usaremos en el curso es:\n", "\n", " import numpy as np\n", " \n", "Ahora podremos llamar a funciones escribiendo:\n", "\n", " np.sin(5)\n", " np.linspace(0,100,50)\n", " " ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.2246467991473532e-16" ] }, "execution_count": 4, "metadata": {}, "output_type": "execute_result" } ], "source": [ "np.sin(np.pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `from _____ import ___, ___, ___` " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "También podríamos importar funciones concretas dentro del paquete que queramos usar, por ejemplo:\n", "\n", "```\n", "from numpy import linspace, sin\n", "```" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from numpy import linspace, sin" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "1.2246467991473532e-16" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sin(np.pi)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## `from _____ import *` " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Si esto te sigue pareciendo demasido escribir puedes hacer (__altamente no recomendado__):\n", "\n", " from numpy import *\n", " \n", "El asterisco, quiere decir _TODO_. Esto genera varios problemas: \n", "\n", "* __Imporatará gran cantidad de funciones y clases que puede que no necesites__.\n", "* El nombre de estas funciones, puede coincidir con el de alguna de otro módulo que hayas importado, de manera que \"la machacará\", por lo que __se producirán ambigüedades__." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Ejemplo: ¿por qué no hacer from numpy import * ?" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "array([ 0.84147098, 0.90929743, 0.14112001, -0.7568025 , -0.95892427])" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from numpy import *\n", "\n", "a = [1,2,3,4,5]\n", "sin(a)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "collapsed": false }, "outputs": [ { "ename": "TypeError", "evalue": "a float is required", "output_type": "error", "traceback": [ "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m", "\u001b[0;31mTypeError\u001b[0m Traceback (most recent call last)", "\u001b[0;32m\u001b[0m in \u001b[0;36m\u001b[0;34m()\u001b[0m\n\u001b[1;32m 1\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mmath\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 2\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 3\u001b[0;31m \u001b[0msin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m", "\u001b[0;31mTypeError\u001b[0m: a float is required" ] } ], "source": [ "from math import *\n", "\n", "sin(a)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__La función seno que incorporá math no es la misma que la de NumPy__. Ambas proporcionarán el seno de un número, evidentemente, el mismo resultado para el mismo número, pero una acepta listas y la otra no. Al hacer la segunda importación, la función seno de NumPy se ha sustituido por la de math y la misma sentencia, da un error. Esto puede hacer que te vuelvas un poco loco si tu código es grande o acabes volviendo loco a alguien si usa tu código.\n", "\n", "¿Suficiente? Ahora ya sabes por qué tendrás que escribir `np.loquesea` __siempre__." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "___Hemos aprendido:___\n", "\n", "* Cómo importar bibliotecas en Python\n", "* Por qué debemos importar `numpy` como `np`" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "
\n", "####

¡Síguenos en Twitter!\n", "
\n", "###### Follow @AeroPython \n", "
\n", "###### Este notebook ha sido realizado por: Juan Luis Cano y Álex Sáez \n", "
\n", "##### \"Licencia
Curso AeroPython por Juan Luis Cano Rodriguez y Alejandro Sáez Mollejo se distribuye bajo una Licencia Creative Commons Atribución 4.0 Internacional." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "_Las siguientes celdas contienen configuración del Notebook_\n", "\n", "_Para visualizar y utlizar los enlaces a Twitter el notebook debe ejecutarse como [seguro](http://ipython.org/ipython-doc/dev/notebook/security.html)_\n", "\n", " File > Trusted Notebook" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/html": [ "/* This template is inspired in the one used by Lorena Barba\n", "in the numerical-mooc repository: https://github.com/numerical-mooc/numerical-mooc\n", "We thank her work and hope you also enjoy the look of the notobooks with this style */\n", "\n", "\n", "\n", "El estilo se ha aplicado =)\n", "\n", "\n", "\n" ], "text/plain": [ "" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Esta celda da el estilo al notebook\n", "from IPython.core.display import HTML\n", "css_file = '../styles/aeropython.css'\n", "HTML(open(css_file, \"r\").read())" ] } ], "metadata": { "anaconda-cloud": {}, "kernelspec": { "display_name": "Python [default]", "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.5.2" } }, "nbformat": 4, "nbformat_minor": 0 }