{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"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",
"##### 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
}