Autores: | Fernando Pérez, Emmanuelle Gouillart, Gaël Varoquaux, Valentin Haenel |
---|
Qué soluciones usan los científicos para trabajar?
Lenguajes compilados: C, C++, Fortran, etc.
Lenguajes de script: Matlab
Otros lenguajes de script: Scilab, Octave, Igor, R, IDL, etc.
Qué hay de Python?
Al contrario de Matlab, Scilab o R, Python no viene con un conjunto de módulos para cálculo científico. A continuación se muestran los bloques o librerías básicas que, correctamente combinados, permiten obtener un completo ambiente de desarrollo para cálculo científico:
Python, un lenguaje computacional genérico y moderno
IPython, una consola avanzada de Python http://ipython.org/
Numpy: proporciona poderosos objetos llamados arreglos numéricos y rutinas para manipularlos. http://www.numpy.org/
Scipy: rutinas de alto nivel para procesamiento de datos. Optimización, regresión, interpolación, etc. http://www.scipy.org/
Matplotlib: visualización bidimensional, gráficos “listos para publicar” http://matplotlib.sourceforge.net/
Mayavi: visualización tridimensional http://code.enthought.com/projects/mayavi/
Trabajo interactivo para probar y entender algoritmos: En esta sección, describiremos un flujo de trabajo interactivo con IPython que es práctico para explorar y entender algoritmos.
Python es un lenguaje multipropósito. Como tal, no existe un ambiente bendito para trabajar ni hay una sola manera de usarlo. Aunque esto hace que sea más difícil para principiantes encontrar su propio camino, esto hace posible que Python sea usado para escribir programas en servidores web o dispositivos embebidos.
Nota
Documento de referencia para esta sección:
IPython user manual: http://ipython.org/ipython-doc/dev/index.html
Iniciar ipython:
In [1]: print('Hola mundo')
Hola mundo
Obteniendo ayuda usando el operador ? después de un objeto:
In [2]: print?
Type: builtin_function_or_method
Base Class: <type 'builtin_function_or_method'>
String Form: <built-in function print>
Namespace: Python builtin
Docstring:
print(value, ..., sep=' ', end='\n', file=sys.stdout)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
Creamos un archivo mi_fichero.py en un editor de texto. En EPD (Enthought Python Distribution), puedes usar Scite, disponible en el menú de inicio. En Python(x,y) puedes usar Spyder. En Ubuntu, si todavía no tienes un editor favorito, te aconsejamos instalar Stani's Python editor. En el archivo, agrega las siguientes líneas:
s = 'Hola mundo'
print(s)
Ahora, puedes ejecutarlo en IPython y explorar las variables resultantes:
In [1]: %run mi_fichero.py
Hola mundo
In [2]: s
Out[2]: 'Hola mundo'
In [3]: %whos
Variable Type Data/Info
----------------------------
s str Hola mundo
Desde un script hasta funciones
Si bien es tentador trabajar solo con scripts, que es un archivo lleno de instrucciones a seguir que se siguen una tras otra, iremos planeando una evolución progresiva del script hacia un conjunto de funciones:
El manual de usuario de IPython contiene mucha información sobre cómo usar IPython, pero para que puedas iniciarte queremos darte una breve introducción a tres características útiles: historial, funciones mágicas y autocompletado con tabulador.
Al igual que una consola UNIX, IPython cuenta con un historial de comandos. Teclea arriba y abajo para reutilizar los comandos anteriormente ejecutados:
In [1]: x = 10
In [2]: <cursor arriba>
In [2]: x = 10
IPython soporta las llamadas funciones mágicas anteponiendo a un comando el caracter %. Por ejemplo, las funciones run y whos de la sección anterior son funciones mágicas. Tenga en cuenta que, el ajuste automagic está activado por defecto, te permite omitir el signo % predecesor al comando. De esta forma, puedes solo escribir la función mágica y funcionará.
Otras funciones mágicas útiles son:
%cd para cambiar el directorio actual.
In [2]: cd /tmp
/tmp
%timeit permite medir el tiempo de ejecución de pequeños fragmentos de código usando el módulo timeit de la biblioteca estándar:
In [3]: timeit x = 10
10000000 loops, best of 3: 39 ns per loop
%cpaste te permite pegar código, especialmente aquel que venga de un sitio web que proceda de la consola estándar de Python (o sea >>>) o de la consola IPython (por ejemplo: In [3]:):
In [5]: cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:In [3]: timeit x = 10
:--
10000000 loops, best of 3: 85.9 ns per loop
In [6]: cpaste
Pasting code; enter '--' alone on the line to stop or use Ctrl-D.
:>>> timeit x = 10
:--
10000000 loops, best of 3: 86 ns per loop
%debug te permite entrar en depuración post-mortem. Esto quiere decir que si el código que intentas ejecutar lanza una excepción, usando %debug entrarás al depurador en el punto donde ocurrió la excepción.
In [7]: x === 10
File "<ipython-input-6-12fd421b5f28>", line 1
x === 10
^
SyntaxError: invalid syntax
In [8]: debug
> /home/esc/anaconda/lib/python2.7/site-packages/IPython/core/compilerop.py(87)ast_parse()
86 and are passed to the built-in compile function."""
---> 87 return compile(source, filename, symbol, self.flags | PyCF_ONLY_AST, 1)
88
ipdb>locals()
{'source': u'x === 10\n', 'symbol': 'exec', 'self':
<IPython.core.compilerop.CachingCompiler instance at 0x2ad8ef0>,
'filename': '<ipython-input-6-12fd421b5f28>'}
Nota
La chuleta (o cheat-sheet) de IPython es accesible a través de la función mágica %quickref.
Nota
Se muestra una lista de todas las funciones mágicas disponibles cuando se escribe %magic.
Además, IPython viene con diversos alias que emulan herramientas comunes de líneas de comando UNIX como ls para listar archivos, cp para copiar archivos y rm para eliminar archivos. Se muestra una lista de los alias disponibles cuando se escribe alias:
In [1]: alias
Total number of aliases: 16
Out[1]:
[('cat', 'cat'),
('clear', 'clear'),
('cp', 'cp -i'),
('ldir', 'ls -F -o --color %l | grep /$'),
('less', 'less'),
('lf', 'ls -F -o --color %l | grep ^-'),
('lk', 'ls -F -o --color %l | grep ^l'),
('ll', 'ls -F -o --color'),
('ls', 'ls -F --color'),
('lx', 'ls -F -o --color %l | grep ^-..x'),
('man', 'man'),
('mkdir', 'mkdir'),
('more', 'more'),
('mv', 'mv -i'),
('rm', 'rm -i'),
('rmdir', 'rmdir')]
Finalmente, nos gustaría mencionar la característica de autocompletado con tabulador, cuya descripción la extraemos directamente del manual original de IPython:
El autocompletado con tabulador, especialmente para atributos, es una manera conveniente de explorar la estructura de cualquier objeto con el que estés tratando. Simplemente escribe nombre_del_objeto.<TAB> para ver los atributos del objeto. Además de objetos y palabras claves de Python, el autocompletado con tabulador también funciona para nombres de archivos y directorios.
In [1]: x = 10
In [2]: x.<TAB>
x.bit_length x.conjugate x.denominator x.imag x.numerator
x.real
In [3]: x.real.
x.real.bit_length x.real.denominator x.real.numerator
x.real.conjugate x.real.imag x.real.real
In [4]: x.real.