Python para Cientificos

download Python para Cientificos

of 18

Transcript of Python para Cientificos

  • 8/4/2019 Python para Cientificos

    1/18

    Python como entorno de desarrollo cientfico.Guillem Borrell Nogueras

    18 de julio de 2008

    1. Introduccin

    Existe cierta confusin con los conceptos de lenguaje y herramienta. Mientras una herramienta nacecomo respuesta a una necesidad funcional los lenguajes sirven para dar sentido a la realidad; se encuentranen planos completamente distintos. Los lenguajes de programacin tienen ms en comn con las lenguaso el lenguaje matemtico que con un mecanismo o un motor. Sin embargo uno puede ahogarse en librosdonde se analiza sistemticamente un lenguaje de programacin como si de una herramienta se tratara.

    Los parmetros para juzgar un lenguaje son ajenos a un ingeniero o un matemtico y ms cercanosa un filsofo: aprendizaje, incertidumbre, consistencia o formalismo. La programacin es la creacinde literatura con un lenguaje especfico y tiene ingredientes como la sintaxis, el lxico... Incluso faltasde ortografa! Un ingeniero tiende a valorar segn parmetros como la eficiencia, la simplicidad o larapidez. Pocas veces constatamos el error que estos conceptos no pueden aplicarse a un lenguaje porqueson propios de los mecanismos. Es algo bastante comn: cuando slo tienes un martillo todo te parece unclavo.

    Los lenguajes de programacin evolucionan como las lenguas naturales. Nacen a partir de lenguasprimitivas y siguen uno de los dos caminos posibles: la evolucin o la muerte. Existen en ambos casoslenguas muertas. Podra compararse COBOL con el latn, a pocos se les ocurrira aprenderlos hoy en da

    sin embargo los programas que controlan las transacciones bancarias se escriben en COBOL al igual queen el Vaticano se siguen analizando textos en latn.

    Los lenguajes sirven para comunicar significado. Utilizar el castellano para una crnica futbolsticaes equivalente a formular un teorema mediante un lenguaje matemtico. Los lenguajes de programacinsirven para comunicar algoritmos a ordenadores. Aqu aparece otro concepto crucial: comunicacin. Esuna accin que requiere un interlocutor y en la programacin siempre es el mismo: un ordenador.

    La comunicacin con los ordenadores ha evolucionado rpidamente desde la construccin del primerordenador programable. Una ancdota posiblemente apcrifa cuenta que Seymour Cray1 era capaz dearrancar el sistema operativo de un CDC7600 manipulando la memoria de este ordenador primitivo amano. Ahora los lenguajes de programacin son tan simples que hasta un nio de ocho aos es capaz deaprenderlos2. Quin se esforzara hoy en depurar un programa a partir del volcado de memoria? Hablarlea los ordenadores es ms sencillo porque se han vuelto ms listos, han evolucionado.

    Python es fruto de esta evolucin. Es un lenguaje de programacin de quinta o sexta generacin nacidocuando los ordenadores eran ya tan potentes como para no tener que estar continuamente pensando en lamemoria y la velocidad de ejecucin. Es uno de los primeros lenguajes de programacin en los que supropia naturaleza no se ha visto coartada por las limitaciones del ordenador. Es, en consecuencia, uno delos lenguajes ms humanos con los que se puede programar. Hoy pocos discuten que una herramienta mscercana al programador ayuda a implementar algoritmos ms complejos en menos tiempo y a cometer

    1h t t p : / / e n . w i k i p e d i a . o r g / w i k i / S e y m o u r _ C r a y

    2Un texto clsico sobre la evolucin de los lenguajes de programacin es Real men dont use Pascal:h t t p : / / w w w . p b m . c o m /

    ~ l i n d a h l / r e a l . p r o g r a m m e r s . h t m l

    1

    http://www.pbm.com/~lindahl/real.programmers.htmlhttp://www.pbm.com/~lindahl/real.programmers.htmlhttp://en.wikipedia.org/wiki/Seymour_Cray
  • 8/4/2019 Python para Cientificos

    2/18

    menos errores. Esto es fundamental para que quienes no disponen de una formacin especfica en laprogramacin, como cientficos e ingenieros, escriban programas sin tener que aprender ms all de lofundamental.

    Los lenguajes de programacin de alto nivel deben traducirse mediante compilador o un intrprete.Este es el punto donde se crea la confusin: el compilador o el intrprete s son herramientas desde elpunto de vista tcnico. La naturaleza de un lenguaje de programacin influye significativamente en eldiseo y posibilidades del compilador o del intrprete. Por ejemplo, en los lenguajes dinmicos comoPython el tipo de las variables se conoce en tiempo de ejecucin. Esto aade ciertas posibilidades allenguaje como el hecho de no tener que declarar las variables. Muchos de estos lenguajes no pueden sercompilados lo que ya impone que la comunicacin nunca podr efectuarse con un compilador sino quetendr que ser con un intrprete.

    Un ingeniero no tiene la formacin necesaria para analizar un lenguaje pero s puede entrar en ladiscusin sobre qu maquinaria, ya sea interprete o compilador, es ms adecuada en cada caso. Es en estepunto donde el lenguaje pasa a un segundo plano, por ejemplo: utilizar las posibilidades de optimizacinde un compilador de C, aparcando por ello Python, a pesar de sus peores caractersticas como lenguaje.Es la suma todas las herramientas necesarias para resultar productivo lo que influye en el proceso de

    decisin.Este artculo pretende analizar cada una de las ventajas de utilizar Python en un entorno cientfico y

    tcnico, describir los posibles inconvenientes y proponer soluciones para minimizar su efecto .Programar en Python es ms efectivo porque es ms potente sin ser ms complejo. Las razones por

    las que no se ha impuesto an en un entorno cientfico y tcnico son las siguientes:

    El desconocimiento.

    Que el intrprete no se comporte de la manera adecuada.

    Si ya estamos convencidos de la superioridad como lenguaje de Python Es realmente necesariodesperdiciar sus bondades como lenguaje por culpa de las caractersticas del intrprete? El objetivo de esteensayo es demostrar que Python dispone en la actualidad de una coleccin de herramientas suficientes

    como para minimizar la mayora de los inconvenientes que podran descartar su uso .

    1.1. Un enfoque distinto para cada problema

    Las aplicaciones de simulacin pueden dividirse en dos grandes grupos segn sus necesidades compu-tacionales.

    Los pequeos programas de entre una decena y el millar de lneas de cdigo con la misin derealizar un clculo relativamente simple llamados guiones o scripts.

    Las grandes simulaciones de computacin de alto rendimiento con tiempos de ejecucin largos ensuperordenadores y ciclos de vida de aos o dcadas.

    Los scripts suelen implementarse en lenguajes interpretados especializados en matemticas e inge-niera, la mayora de ellos propietarios, que permiten un acceso sencillo y directo a una enorme bibliotecade funciones especializadas3. En este mbito Python compite directamente con Matlab, Mathematica,Maple, IDL... En estos casos Python es ya una alternativa a este software ya que ofrece funcionalidadesmuy parecidas a coste cero. Esto significa que Python debe disponer de una coleccin de bibliotecas con-siderable y comparable con los productos comerciales actuales. Las primeras secciones de este artculo

    3Los lenguajes de nicho o diseados especficamente para un sector reciben el nombre de Domain Specific Languages, a partirde ahora DSL

    2

  • 8/4/2019 Python para Cientificos

    3/18

    se dedicarn a listar de un modo poco detallado todas las bibliotecas y aplicaciones que han sido escritasen Python o utilizan el intrprete de Python de utilidad en Matemticas, Fsica o Ingeniera.

    En el otro extremo, tradicionalmente se ha argumentado que debido a que los programas ms exigen-

    tes desde un punto de vista computacional deben programarse en el lenguaje que asegure una mximavelocidad en la ejecucin prescindiendo de ciertas propiedades deseables. Si bien existen unos pocos ca-sos patolgicos en los que la velocidad es la nica variable a tener en cuenta 4, en la mayora la parte delcdigo que explota al mximo hardware se reduce a unas pocas lneas. Este artculo dedicar sus ltimasscciones a comentar las distintas tcnicas de optimizacin de cdigo y qu posibilidades ofrece Pythonpara ello.

    Atencin!

    Este documento en pdf contiene archivos adjuntos necesarios para realizar los ejemplosdescritos.

    2. Scripting en Python

    Python fue diseado como un lenguaje de scripting para uso general. El principal criterio de diseo seresume en una frase: en Python slo debe existir una manera elegante y lgica de hacer cualquier cosa.Esta condicin de diseo tan poco precisa se complementa con lo siguiente:

    Ser lo suficientemente simple como para que pueda recordarse fcilmente.

    Soportar todos los paradigmas modernos de programacin.

    Ofrecer una librera estndar amplia que responda a la mayora de las necesidades.

    Forzar una sintaxis clara y un cdigo leble y fcilmente modificable.

    La programacin en Python se ha convertido paulatinamente en la expresin del minimalismo en laprogramacin y queda reflejada en el cdigo zen de Python. Es una buena oportunidad para ejecutar elprimer comando dentro de una consola de python5.

    1> > > i m p o r t t h i s

    2T h e Z e n o f P y t h o n , b y T i m P e t e r s

    3

    4B e a u t i f u l i s b e t t e r t h a n u g l y .

    5E x p l i c i t i s b e t t e r t h a n i m p l i c i t .

    6S i m p l e i s b e t t e r t h a n c o m p l e x .

    7 C o m p l e x i s b e t t e r t h a n c o m p l i c a t e d .

    8 F l a t i s b e t t e r t h a n n e s t e d .

    9 S p a r s e i s b e t t e r t h a n d e n s e .

    10 R e a d a b i l i t y c o u n t s .

    11 S p e c i a l c a s e s a r e n ' t s p e c i a l e n o u g h t o b r e a k t h e r u l e s .

    12 A l t h o u g h p r a c t i c a l i t y b e a t s p u r i t y .

    13 E r r o r s s h o u l d n e v e r p a s s s i l e n t l y .

    4Algunos cdigos de Mecnica de Fluidos Computacional tienen tiempos de ejecucin de meses o incluso aos y ciclos dedesarrollo de entre dos y cuatro aos. Es comprensible que en estos casos no se tengan en cuenta muchas de las tcnicas que seproponen en este artculo.

    5Para ejecutar este comando debe disponerse de un intrprete de Python. Si no est instalado en el sistema puede seguirse eltutorial del apndice C.

    3

  • 8/4/2019 Python para Cientificos

    4/18

    14 U n l e s s e x p l i c i t l y s i l e n c e d .

    15 I n t h e f a c e o f a m b i g u i t y , r e f u s e t h e t e m p t a t i o n t o g u e s s .

    16 T h e r e s h o u l d b e o n e - - a n d p r e f e r a b l y o n l y o n e - - o b v i o u s w a y t o d o i t .

    17 A l t h o u g h t h a t w a y m a y n o t b e o b v i o u s a t f i r s t u n l e s s y o u ' r e D u t c h .

    18 N o w i s b e t t e r t h a n n e v e r .

    19 A l t h o u g h n e v e r i s o f t e n b e t t e r t h a n * r i g h t * n o w .

    20 I f t h e i m p l e m e n t a t i o n i s h a r d t o e x p l a i n , i t ' s a b a d i d e a .

    21 I f t h e i m p l e m e n t a t i o n i s e a s y t o e x p l a i n , i t m a y b e a g o o d i d e a .

    22 N a m e s p a c e s a r e o n e h o n k i n g g r e a t i d e a - - l e t ' s d o m o r e o f t h o s e !

    Estas caractersticas han convertido Python en el entorno de desarrollo ideal para quienes no tienenconocimientos especficos sobre entornos de desarrollo pero s saben programar como suele ser habitualentre cientficos e ingenieros. Su crecimiento en el mbito de la enseanza es lento pero constante y vieneconfirmado por la progresiva aparicin de proyectos cientficos que utilizan Python como lenguaje deprogramacin.

    Aunque es muy adecuado para iniciarse en la programacin an no se ha popularizado lo suficientecomo para que se ensee en las universidades. Consecuencia directa de ello es que la gran mayora

    de quienes se interesan por Python lo hacen ya habiendo aprendido otros lenguajes. Si se posee ciertaexperiencia programando Python es muy fcil de aprender, la documentacin dispone de un tutorial quepuede completarse en un par de horas y asimilarse en unos pocos das. Dispone de una consola interactivacompletamente funcional y es de gran ayuda para experimentar o manipular directamente resultados.

    En UNIX la manera ms sencilla de iniciar una consola es mediante el terminal, simplemente escri-biendo python en l.

    1$ p y t h o n

    2P y t h o n 2 . 5 . 2 ( r 2 5 2 : 6 0 9 1 1 , J u n 2 8 2 0 0 8 , 0 4 : 3 0 : 4 3 )

    3[ G C C 4 . 3 . 1 ] o n l i n u x 2

    4T y p e " h e l p " , " c o p y r i g h t " , " c r e d i t s " o r " l i c e n s e " f o r m o r e i n f o r m a t i o n .

    5> > >

    En Windows el instalador oficial proporciona tambin una que puede arrancarse a partir de la entrada

    correspondiente en el men de inicio.Cualquier instruccin de cdigo Python es entendida del mismo modo por el intrprete y por la con-

    sola. Esta es, por ejemplo, la manera ms sencilla de sacar por pantalla la serie de Fibonacci:

    1> > > ( a , b ) = ( 0 , 1 )

    2> > > w h i l e b < 1 0 :

    3. . . p r i n t b

    4. . . ( a , b ) = ( b , a + b )

    5. . .

    61

    71

    82

    93

    105

    118

    Los programadores con cierta experiencia habrn distinguido las siguientes particularidades:

    El tipo definido entre parntesis es un tuple y es una generalizacin de las variables que funcionatambin en la asignacin.

    La definicin de los bloques de ejecucin, en este caso un bucle lgico, se definen por el sangradodel propio bloque. Se recomienda que este sangrado est formado por cuatro espacios para homo-

    4

  • 8/4/2019 Python para Cientificos

    5/18

    geneizar todo el cdigo existente aunque el intrprete pueda entender tambin sangrados de dosespacios y tabulaciones. Esta caracterstica crea tantos adeptos como detractores.

    Representar en pantalla es tan sencillo como escribir la variable tras el comando print.

    Tan sencillo como este juego matemtico es crear una ventana grfica sobre la que empezar un interfazde usuario

    1 > > > f r o m T k i n t e r i m p o r t *

    2 > > > t = T k ( )

    Acto seguido aparece la ventana representada en la figura 2

    Figura 1: Ventana gracias al mdulo Tkinter

    Tambin esta vez los programadores expertos habrn notado que el mecanismo para cargar en elintrprete nuevas funciones son los mdulos y que a su vez cada mdulo es un namespace.

    La ltima particularidad digna de mencin antes de empezar con las caractersticas del lenguaje esmencionar la ayuda interactiva. Cada funcin de la biblioteca estndar, que analizaremos a continuacin,est meticulosamente documentada para que cualquier sesin con el interprete pueda ser adems una

    visita a la documentacin. Por ejemplo:1 > > > i m p o r t c m a t h

    2> > > h e l p ( c m a t h . a c o s )

    3H e l p o n b u i l t - i n f u n c t i o n a c o s i n m o d u l e c m a t h :

    4

    5a c o s ( . . . )

    6a c o s ( x )

    7

    8R e t u r n t h e a r c c o s i n e o f x .

    Puede apreciarse que los mdulos no slo definen un namespace sino que adems cada mdulo esun objeto. A partir de la funcin help puede consultarse la documentacin de cada funcin a travs delintrprete.

    Recuerda que en los lenguajes interpretados no hay tipos derivados

    2.1. El lenguaje de programacin Python

    Esta es slo una breve introduccin de las sentencias y la sintaxis del lenguaje Python. Es una descrip-cin deliberadamente incompleta de modo que el tutorial oficial del lenguaje[TUT] se convierte a partirde ahora en una lectura obligada.

    Para dar un poco ms de profundidad a este anlisis tan breve todos los tipos y las sentencias se com-pararn con las del lenguaje de scripting por excelencia dentro del entorno cientfico y tcnico, Matlab.

    5

  • 8/4/2019 Python para Cientificos

    6/18

    2.1.1. Operaciones aritmticas

    Python puede utilizarse como una calculadora algebraica para realizar las operaciones aritmticasusuales:

    1> > > 2 + 2 # S u m a

    24

    3> > > 2 - 1 # R e s t a

    4 1

    5 > > > 2 * 4 . 5 # M u l t i p l i c a c i o n

    6 9 . 0

    7 > > > 2 / 4 . 5 # D i v i s i o n

    8 0 . 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 2

    Las nicas diferencias entre Python y Matlab es que hasta la versin 3.x la divisn entre dos enterosdevuelve otro entero:

    1 > > > 5 / 3

    2 1

    Para conseguir en la versin 2.x el mismo comportamiento que en la 3.x bastar con introducir lossiguientes comandos en el intrprete o con incluirlos en el cdigo fuente.

    1 > > > f r o m _ _ f u t u r e _ _ i m p o r t d i v i s i o n

    2 > > > 5 / 3

    3 1 . 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7

    Y que el operador potencia obedece al doble asterisco como en Fortran mientras que el smbolo deacento circunflejo se reserva para el operador XOR como en C.

    1> > > 5 * * 3

    21 2 5

    Al igual que en Matlab la representacin por omisin de los nmeros en coma flotante es la de doble

    precisin, es decir, el double de C.Las funciones matemticas bscias se encuentran en el mdulo math y el soporte para nmeros com-plejos en cmath.

    1> > > i m p o r t m a t h a s m

    2 > > > i m p o r t c m a t h a s c

    3 > > > a = 3 . 0 + 4 . 0 j

    4 > > > a / c o m p l e x ( 2 , 1 . 3 )

    5 ( 1 . 9 6 8 3 6 5 5 5 3 6 0 2 8 1 2 + 0 . 7 2 0 5 6 2 3 9 0 1 5 8 1 7 2 1 4 j )

    6 > > > c . e x p ( _ )

    7 ( 5 . 3 7 9 4 9 6 0 1 3 7 7 4 7 2 2 3 + 4 . 7 2 3 5 3 8 5 5 3 3 2 7 2 5 2 9 j )

    8 > > > m . e x p ( a b s ( _ ) )

    9 1 2 8 5 . 5 8 0 9 2 2 1 9 9 9 8 6 4

    En esta pequea seccin se muestran varias caractersticas de Python.

    La funcin exponencial, exp, se encuentra tanto en el mdulo math para nmeros en coma flotantecomo en el cmath de modo que si slo se importa la funcin puede existir un conflicto de nombres.La solucin es importar cada mdulo en un namespace distinto.

    Se puede generar un nmero complejo tanto directamente con la constante reservada j como me-diante la funcin complex.

    El carcter _ es tambin una constante reservada que almacena el resultado del comando anterior.

    6

  • 8/4/2019 Python para Cientificos

    7/18

    2.2. Control de flujo

    La gran particularidad de Python para el control de flujo es esa peculiar manera de diferenciar losbloques de ejecucin.

    2.2.1.i f

    1> > > x = i n t ( r a w _ i n p u t ( " P o r f a v o r , i n t r o d u z c a u n e n t e r o : " ) )

    2> > > i f x < 0 :

    3. . . x = 0

    4. . . p r i n t ' E r a n e g a t i v o y l o h e c a m b i a d o a c e r o '

    5. . . e l i f x = = 0 :

    6. . . p r i n t ' C e r o '

    7. . . e l i f x = = 1 :

    8. . . p r i n t ' U n o '

    9. . . e l s e :

    10. . . p r i n t ' M a s '

    11 . . .

    2.2.2.f o r

    Python, como en algunos lenguajes interpretados, las iteraciones no son especficamente un bucle sinoque se trata de la secuenciacin de un iterador.

    1 > > > a = [ ' g a t o ' , ' v e n t a n a ' , ' d e f e n e s t r a r ' ]

    2> > > f o r x i n a :

    3. . . p r i n t x , l e n ( x )

    4. . .

    5g a t o 4

    6v e n t a n a 7

    7d e f e n e s t r a r 1 1

    8> > > f o r x i n a : # H a c e d e s t o y m o r i d

    9. . . i f l e n ( x ) > 6 : a . i n s e r t ( 0 , x )

    Es importante no intentar modificar una lista mientras se est iterando sobre ella, hay que crear unacopia temporal gracias al slicing.

    Disponemos tambin de las sentenciasb r e a k

    yc o n t i n u e

    para controlar el flujo de ejecucin dentrodel bucle.

    2.2.3. La funcin r a n g e

    Esta funcin devuelve el iterable ms sencillo posible, un contador

    1 > > > r a n g e ( 4 )

    2 [ 0 , 1 , 2 , 3 ]

    3 > > > r a n g e ( 3 , 1 2 , 3 )

    4 [ 3 , 6 , 9 ]

    2.2.4. Definicin de funciones

    Ahora modificamos la funcin que crea la serie de fibonacci para que devuelva una lista:

    1d e f f i b 2 ( n ) :

    2" " " D e v u e l v e u n a l i s t a c o n l a s e r i e d e F i b o n a c c i h a s t a n . " " "

    3r e s u l t = [ ]

    7

  • 8/4/2019 Python para Cientificos

    8/18

    4 ( a , b ) = ( 0 , 1 )

    5 w h i l e b < n :

    6 r e s u l t . a p p e n d ( b )

    7 ( a , b ) = ( b , a + b )

    8 r e t u r n r e s u l t

    Si una funcin debe devolver ms de una variable debe utilizarse un tuple. La palabra clave returntermina tambin con la ejecucin de la funcin as que es una estrategia ms para el control de flujo deejecucin.

    El intrprete sabe que la definicin de la funcin se ha acabado porque, al igual que con las otrasestructuras de cdigo descritas hasta ahora, termina su nivel de sangrado propio.

    2.2.5. Funciones lambda

    Especialmente tiles en el caso que uno necesite devolver una funcin como argumento de un mtodo.Python tambin soporta algunas utilidades de la programacin funcional como los decoradores.

    1> > > d e f m a k e _ i n c r e m e n t o r ( n ) :

    2 . . . r e t u r n l a m b d a x : x + n

    3 . . .

    4 > > > f = m a k e _ i n c r e m e n t o r ( 4 2 )

    5 > > > f ( 0 )

    6 4 2

    7 > > > f ( 1 )

    8 4 3

    2.3. Palabras clave

    Una perfecta demostracin que Python es un lenguaje pequeo es la cantidad mnima de palabrasclave que se reservan.

    1a n d d e l f o r i s r a i s e

    2a s s e r t e l i f f r o m l a m b d a r e t u r n

    3b r e a k e l s e g l o b a l n o t t r y

    4 c l a s s e x c e p t i f o r w h i l e

    5 c o n t i n u e e x e c i m p o r t p a s s y i e l d

    6 d e f f i n a l l y i n p r i n t

    2.4. Tipos

    Como todos los lenguajes modernos orientados a objetos como los tipos estndares a parte de dispo-nen de una gran funcionalidad. El tipo lista, por ejmplo, proporciona mtodos para realizar casi cualquieroperacin que se nos pueda ocurrir con una lista. Python dispone de los siguientes:

    Enteros

    Nmeros en coma flotante

    Nmeros complejos

    Cadenas de texto

    Listas

    8

  • 8/4/2019 Python para Cientificos

    9/18

    Tuples

    Conjuntos

    DiccionariosCada uno de ellos viene definido por una clase propia dentro del lenguaje con sus mtodo asignados.

    A continuacin se presenta una lista de todos los mtodos disponibles dentro de la clase lista:

    1 a . _ _ a d d _ _ a . _ _ i a d d _ _ a . _ _ r m u l _ _

    2 a . _ _ c l a s s _ _ a . _ _ i m u l _ _ a . _ _ s e t a t t r _ _

    3 a . _ _ c o n t a i n s _ _ a . _ _ i n i t _ _ a . _ _ s e t i t e m _ _

    4 a . _ _ d e l a t t r _ _ a . _ _ i t e r _ _ a . _ _ s e t s l i c e _ _

    5 a . _ _ d e l i t e m _ _ a . _ _ l e _ _ a . _ _ s t r _ _

    6 a . _ _ d e l s l i c e _ _ a . _ _ l e n _ _ a . a p p e n d

    7 a . _ _ d o c _ _ a . _ _ l t _ _ a . c o u n t

    8a . _ _ e q _ _ a . _ _ m u l _ _ a . e x t e n d

    9a . _ _ g e _ _ a . _ _ n e _ _ a . i n d e x

    10a . _ _ g e t a t t r i b u t e _ _ a . _ _ n e w _ _ a . i n s e r t

    11a . _ _ g e t i t e m _ _ a . _ _ r e d u c e _ _ a . p o p

    12a . _ _ g e t s l i c e _ _ a . _ _ r e d u c e _ e x _ _ a . r e m o v e

    13a . _ _ g t _ _ a . _ _ r e p r _ _ a . r e v e r s e

    14a . _ _ h a s h _ _ a . _ _ r e v e r s e d _ _ a . s o r t

    La descripcin detallada de todos los mtodos para cada uno de los tipos puede encontrarse en lareferencia oficial del lenguaje [REF] que se distribuye conjuntamente con el tutorial mencionado ante-riormente. Mientras seguir con atencin el tutorial es casi imprescindible para programar la referenciaexiste nicamente como herramienta de consulta.

    Quizs una de las cosas que ms caracteriza las listas en Python es su creacin mediante los listcomprehensions

    1> > > [ ( x , x * * 2 ) f o r x i n v e c ]

    2[ ( 2 , 4 ) , ( 4 , 1 6 ) , ( 6 , 3 6 ) ]

    3> > > v e c 1 = [ 2 , 4 , 6 ]

    4> > > v e c 2 = [ 4 , 3 , - 9 ]

    5> > > [ x * y f o r x i n v e c 1 f o r y i n v e c 2 ]

    6[ 8 , 6 , - 1 8 , 1 6 , 1 2 , - 3 6 , 2 4 , 1 8 , - 5 4 ]

    7> > > [ x + y f o r x i n v e c 1 f o r y i n v e c 2 ]

    8[ 6 , 5 , - 7 , 8 , 7 , - 5 , 1 0 , 9 , - 3 ]

    9> > > [ v e c 1 [ i ] * v e c 2 [ i ] f o r i i n r a n g e ( l e n ( v e c 1 ) ) ]

    10[ 8 , 1 2 , - 5 4 ]

    Ejercicio:

    Crear una lista que contenga las cadenas de textou n o

    ,d o s

    ,t r e s

    yc u a t r o

    . Copiar los elementosque contienen la letra o a una lista nueva. Primero hacerlo con un bucle y luego mediante un list

    comprehension(una lnea de cdigo).

    2.5. La biblioteca estndar

    Una de las particularidades de Python como lenguaje es la gran extensin temtica de su bibliotecaestndar. Lejos de mantenerse ajeno de las bibliotecas y aplicaciones muchos de los mdulos de usocomn se han oficializado hasta formar parte de la distribucin oficial.

    Est perfectamente documentada en [STB]. Dentro de la misma encontramos mdulos para:

    9

  • 8/4/2019 Python para Cientificos

    10/18

    Manipulacin textual

    Envo de correos electrnicos

    Proceso de contenido en XML, csv, XDR...Criptografa

    Interaccin con el sistema operativo

    Compresin de datos

    Almacenamiento de variables

    Enlazado con libreras externas.

    Acceso a las funcionalidades POSIX

    IPC y redes.

    Protocolos de internet (XMLRPC, cookies, cgi, smtp, http, ftp...)

    Multimedia

    GUI

    Internacionalizacin

    Documentacin

    Tests

    Debugging

    Profiling

    Es una lista considerable para ser una biblioteca estandar si se compara con libc o la STL. Esta listano tiene en cuenta en ningn caso todos los mdulos no oficiales que pueden encontrarse en el PythonPackage Index

    h t t p : / / p y p i . p y t h o n . o r g / p y p i

    .

    Ejercicio:

    A partir del mdulo os ejecutar la ordenl s

    para ver el contenido del directorio actual.

    Ejercicio:

    A partir del mdulo sys conseguir que un programa escrito en Python devuelva una ayuda al pasar-le el argumento -h

    10

    http://pypi.python.org/pypihttp://pypi.python.org/pypi
  • 8/4/2019 Python para Cientificos

    11/18

    3. Orientacin a objetos

    La orientacin a objetos es un paradigma para la implementacin de algoritmos ya no tan nuevo.Es una estructura que puede contener a la vez variables y mtodos propios y que dispone de ciertaspropiedades como la herencia y el polimorfismo.

    Su origen proviene de la necesidad de acercar el lenguaje formal de la programacin a la realidad.Los tipos habituales como real, entero o cadena de caracteres describen elementos que habitan de formanatural en el ordenador, ninguno de ellos tiene sentido en la naturaleza. Ni siquiera los caracteres puestoque los lenguajes naturales cuentan con una coleccin de smbolos mucho ms rica que el cdigo ASCII.La realidad son palabras, coches, monitores, lamparas... Ninguno de ellos es fcilmente modelable a partirde un tipo derivado.

    La respuesta a esta necesidad fue crear un nuevo tipo mucho ms potente que puede contener dosfamilias de elementos: datos y mtodos. Los datos son representaciones a un nivel ms cercano al orde-nador del contenido de un objeto. Por ejemplo, para describir el objeto bolgrafo se tomaran los datoscapuchn, punta, tubo y tinta y podran ser simples cadenas de caracteres. Tambin son datos los estados,por ejemplo: lleno, vaco, tapado, roto... Se trata de, al igual que con un tipo derivado, describir con ti-

    pos propios de un ordenador la realidad. Los mtodos son acciones propias de este objeto que describenla interaccin del mismo con su entorno o consigo mismo. Mtodos asociados al bolgrafo podran serdestapar, escribir, morder o voltear.

    La verdadera potencia de la orientacin a objetos no es la de poder juntar datos y mtodos en unamisma construccin sino la capacidad de, mediante la herencia, crear nuevos objetos que modelen reali-dades ms complejas. Por ejemplo, para modelar una pluma estilogrfica junto con el bolgrafo puedenseguirse dos estrategias, la primera es utilizar bolgrafo como clase padre y sobreescribir el dato puntapor plumilla. Otra opcin sera crear un objeto padre de ambos, bolgrafo y pluma estilogrfica, llamadoherramienta de escritura con los datos y mtodos comunes. Bolgrafo y pluma heredaran de herramientade escritura y la ampliaran con los datos y mtodos necesarios.

    En Python los objetos se definen a partir de clases, siendo esta la la expresin ms comn entre loslenguajes de programacin para la ejecucin de la programacin orientada a objetos. Una clase crea un

    tipo, tal como puede ser un entero, una lista o un diccionario; con la particularidad que ha sido formuladadesde el inicio por el programador. Cuando se asigna una clase a una variable esta no contiene un objetosino una instancia de la clase. De este modo se deja el vocablo objeto para un uso mucho ms general.En Python las clases se definen de la siguiente manera:

    1 I n [ 1 ] : i m p o r t m a t h a s m

    2

    3I n [ 2 ] : c l a s s C o m p l e x ( o b j e c t ) :

    4. . . : d e f _ _ i n i t _ _ ( s e l f , r e a l p , i m a g p ) :

    5. . . : s e l f . r = r e a l p

    6. . . : s e l f . i = i m a g p

    7. . . :

    8. . . : d e f a b s ( s e l f ) :

    9. . . : r e t u r n m . s q r t ( s e l f . r * * 2 + s e l f . i * * 2 )

    10. . . :

    Ya se ha definido una clase mnima que modela un nmero complejo. La funcin_ _ i n i t _ _

    es unmtodo especial que describe la funcin a ejecutar durante la instanciacin de la clase. Esto significa queal ejecutarse la clase

    C o m p l e x

    tendr que hacerse con dos argumentos, la parte real y la parte imaginariadel nmero.

    s e l f

    es una palabra clave que sirve para referirse a la clase en s y se pasa como argumentopara reforzar la consistencia sintctica de Python. Cada mtodo puede utilizar los datos definidos en lapropia clase, como

    s e l f

    define a la clase estos datos podrn utilizarse a partir de la clase como raztal como se aprecia en

    s e l f . r

    ys e l f . i

    . Sucede exactamente lo mismo con los mtodos. Se denota la

    11

  • 8/4/2019 Python para Cientificos

    12/18

    accesibilidad de la propia clase en el mtodo pasandos e l f

    como argumento.

    1 I n [ 3 ] : n c = C o m p l e x ( 3 , 4 ) # i n s t a n c i a d e c l a s e

    2

    3I n [ 4 ] : n c . r

    4 O u t [ 4 ] : 3

    5

    6I n [ 5 ] : n c . i

    7O u t [ 5 ] : 4

    8

    9I n [ 6 ] : n c . a b s ( )

    10O u t [ 6 ] : 5 . 0

    Una vez creada la instancia del mtodo ya puede accederse a sus datos y sus mtodos. La claseC o m p l e x

    hereda de la claseo b j e c t

    lo que no es ms que un abuso de notacin para explicitar que se tratade una clase que modela un objeto. A partir de la clase

    C o m p l e x

    se puede crear una claseM o r e C o m p l e x

    que le aade un mtodo a su progenitora:

    1 c l a s s M o r e C o m p l e x ( C o m p l e x ) :

    2 d e f _ _ i n i t _ _ ( s e l f , r e a l p , i m a g p ) :

    3 C o m p l e x . _ _ i n i t _ _ ( s e l f , r e a l p , i m a g p )

    4

    5 d e f a r g ( s e l f ) :

    6 r e t u r n m . a t a n ( s e l f . i / s e l f . r )

    7

    8 I n [ 7 ] : m c = M o r e C o m p l e x ( 3 , 4 )

    9

    10 I n [ 8 ] : m c . a r g ( )

    11O u t [ 8 ] : 0 . 7 8 5 3 9 8 1 6 3 3 9 7 4 4 8 2 8

    De todas las posibles implementaciones prcticas de la orientacin a objetos la eleccin de Python esel duck typing. Se describe mediante una frase bastante curiosa: Si algo anda como un pato y cuaquea

    como un pato yo lo llamar pato. Esta eleccin es consistente con el hecho que en las funciones noes exige declarar el tipo de los argumentos. Si no se exige para los enteros o las cadenas de caractereslos objetos no deben ser una excepcin6. Esto significa que si se pasa una instancia de una clase comoargumento de una funcin sta no va a realizar ninguna comprobacin sobre la verdadera naturaleza deesta instancia. Se entender mejor este concepto con un ejemplo. Se define la clase Pato7 que contiene undato y un par de mtodos. Uno de ellos es

    h a z _ c u a

    que simplemente imprimec u a !

    por pantalla.

    1 > > > c l a s s p a t o :

    2 . . . c a n t i d a d = 1

    3 . . . d e f h a z _ c u a ( s e l f ) :

    4 . . . p r i n t " c u a ! "

    5. . .

    6. . . d e f r e p r o d u c e t e ( s e l f ) :

    7. . . c a n t i d a d + = 1

    8 . . .

    9> > > e s t o e s u n p a t o = p a t o ( ) # i n s t a n c i a d e p a t o

    10> > > e s t o e s u n p a t o . c a n t i d a d

    111

    12> > > e s t o e s u n p a t o . h a z _ c u a ( )

    13c u a !

    6Podemos recordar ahora la importancia del zen de Python7Explicitar la herencia de la clase

    o b j e c t

    es estrictamente opcional, si no existe herencia alguna proveniente de otras clasesdebe omitirse el parntesis. Se deja al lector comprobar la inconsistencia sintctica de dejar el parntesis vaco.

    12

  • 8/4/2019 Python para Cientificos

    13/18

    El paso siguiente es crear una funcin, en este casoc u a q u e a d o r

    que pregunte a un supuesto pato silo es realmente pidindole que cuaquee.

    1 > > > e s t o e s u n p a t o = p a t o ( ) # i n s t a n c i a d e p a t o

    2 > > > d e f c u a q u e a d o r ( s u p u e s t o p a t o ) :

    3 . . . s u p u e s t o p a t o . h a z _ c u a ( )

    4 . . .

    5 > > > c u a q u e a d o r ( e s t o e s u n p a t o )

    6 c u a !

    Efectivamente, como el objetop a t o

    dispone de la funcinh a z _ c u a

    no se produce ningn error. Peroyo soy perfectamente capaz de decir cua! si me piden que lo haga.

    1 > > > c l a s s g u i l l e m :

    2 . . . d e f h a z _ c u a ( s e l f ) :

    3 . . . p r i n t " c u a ! "

    4 . . .

    5 > > > f a l s o p a t o = g u i l l e m ( ) # e s e s o y y o

    6> > > c u a q u e a d o r ( f a l s o p a t o )

    7 c u a !

    Evidentemente yo no soy un pato como puede comprobarse mediante la funcini s i n s t a n c e

    1 > > > i s i n s t a n c e ( f a l s o p a t o , p a t o )

    2 F a l s e

    El duck typing aade el mximo dinamismo posible a un lenguaje de programacin pero puede tam-bin provocar grandes confusiones porque no existe ninguna imposicin a nivel de interfaces entre ob-

    jetos. Existen mdulos que fuerzan la declaracin de las clases cuando un argumento es un objeto, unejemplo de ello es la clase

    I n t e r f a c e

    del popular entorno Zope3.

    4. Numpy

    Una de las primeras extensiones que se programaron para Python, quizs por ser una de las msnecesarias, fue la que proporcionaba la clase de array n-dimensional. Un array es un tipo que puededescribirse mediante dos caractersticas:

    Sus dimensiones

    El tipo de sus elementos

    Esto implica que un array, a diferencia de las listas o los tuples, es homogneo en memoria.Un array es gracias al mdulo Numpy otra clase de Python:

    1> > > f r o m n u m p y i m p o r t a r r a y

    2> > > h e l p ( a r r a y )

    3

    4H e l p o n b u i l t - i n f u n c t i o n a r r a y i n m o d u l e n u m p y . c o r e . m u l t i a r r a y :

    5

    6a r r a y ( . . . )

    7a r r a y ( o b j e c t , d t y p e = N o n e , c o p y = 1 , o r d e r = N o n e , s u b o k = 0 , n d m i n = 0 )

    8

    9R e t u r n a n a r r a y f r o m o b j e c t w i t h t h e s p e c i f i e d d a t e - t y p e .

    10

    11I n p u t s :

    13

  • 8/4/2019 Python para Cientificos

    14/18

    12 o b j e c t - a n a r r a y , a n y o b j e c t e x p o s i n g t h e a r r a y i n t e r f a c e , a n y

    13 o b j e c t w h o s e _ _ a r r a y _ _ m e t h o d r e t u r n s a n a r r a y , o r a n y

    14 ( n e s t e d ) s e q u e n c e .

    15 d t y p e - T h e d e s i r e d d a t a - t y p e f o r t h e a r r a y . I f n o t g i v e n ,

    16 t h e n t h e t y p e w i l l b e d e t e r m i n e d a s t h e m i n i m u m t y p e

    17 r e q u i r e d

    18 [ . . . ]

    Junto con esta clase Numpy proporciona una coleccin mnima pero til de funciones orientadas alclculo numrico, ms concretamente Transformadas Rpidas de Fourier y lgebra Lineal.

    La clase array en Python cuenta con ms de ciento cincuenta mtodos con, probablemente, todaslas operaciones y acciones que puedan resultar de utilidad. Si se comparara con Matlab sin duda Pythonganara en el apartado de la versatilidad.

    Para empezar a jugar con Numpy y los arrays lo mejor es utilizar el atajo siguiente:

    1> > > f r o m n u m p y i m p o r t *

    Este comando carga las funciones usuales cuyos nombres en muchos casos provienen directamente

    de Matlab. He aqu una breve sesin como ejemplo:1 > > > a r a n g e ( 5 ) # i g u a l q u e r a n g e p e r o d e v u e l v e u n a r r a y

    2 a r r a y ( [ 0 , 1 , 2 , 3 , 4 ] )

    3 > > > a r r a y ( [ 0 , 1 , 2 , 3 , 4 ] , ' d ' ) # a r r a y d e d o u b l e s a p a r t i r d e u n a l i s t a

    4 a r r a y ( [ 0 . , 1 . , 2 . , 3 . , 4 . ] )

    5 > > > a r r a y ( [ 0 , 1 , 2 , 3 , 4 ] , ' f ' ) # a r r a y d e f l o a t s a p a r t i r d e u n a l i s t a

    6 a r r a y ( [ 0 . , 1 . , 2 . , 3 . , 4 . ] , d t y p e = f l o a t 3 2 )

    7> > > a r r a y ( [ 0 , 1 , 2 , 3 , 4 ] , d t y p e = c o m p l e x 6 4 ) # a r r a y d e n u m e r o s c o m p l e j o s

    8a r r a y ( [ 0 . + 0 . j , 1 . + 0 . j , 2 . + 0 . j , 3 . + 0 . j , 4 . + 0 . j ] , d t y p e = c o m p l e x 6 4 )

    9> > > x = a r r a y ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] , ' d ' )

    Como puede apreciarse en el ltimo ejemplo el mtodo de introduccin de arrays es encapsulado, esdecir, el ndice que se encuentra en un nivel ms interior ser el primero. No existe el concepto de fila y

    columna como en Matlab.1 > > > x = a r r a y ( [ [ 1 , 2 , 3 ] , [ 4 , 5 , 6 ] , [ 7 , 8 , 9 ] ] , ' d ' )

    2 > > > y = a r r a y ( [ 1 , 0 , 0 ] , ' d ' )

    3 > > > d o t ( x , y )

    4 a r r a y ( [ 1 . , 4 . , 7 . ] )

    Como se puede apreciar se ha operado segn el orden establecido de ndices:

    x y =i

    xi jyi

    donde i era el primer ndice y j el segundo proporcionando una notacin independiente de la geometrade la matriz y mucho ms tensorial. Por ejemplo, si se invierte el orden de los factores se consigue elresultado esperado sin necesidad de trasponer el vector:

    1 > > > d o t ( y , x )

    2 a r r a y ( [ 1 . , 2 . , 3 . ] )

    4.1. Indexing y Slicing

    Numpy hereda de Python una caracterstica que puede resultar desconcertante si no se entienden bienlos conceptos de indexing y slicing. Los arrays son indexables de la manera usual teniendo en cuenta queen Python, como en C, los ndices se cuentan empezando con el cero:

    14

  • 8/4/2019 Python para Cientificos

    15/18

    1 > > > x [ 0 , 1 ]

    2 2 . 0

    3 > > > x [ 0 , : ]

    4 a r r a y ( [ 1 . , 2 . , 3 . ] )

    5 > > > x [ 0 ]

    6 a r r a y ( [ 1 . , 2 . , 3 . ] )

    Las diferencia se encuentra si queremos porciones (slices) de la matriz:

    1 > > > x [ 0 : 3 , 0 : 3 ]

    2 a r r a y ( [ [ 1 . , 2 . , 3 . ] ,

    3 [ 4 . , 5 . , 6 . ] ,

    4 [ 7 . , 8 . , 9 . ] ] )

    Intuitivamente y teniendo en cuenta tal como indexa Python la secuencia debera ir de cero a dos y node cero a tres. Esto es as porque Python utiliza un criterio distinto para los ndices y para las porciones.Se esquematiza perfectamente en esta figura:

    El motivo de esta eleccin es que Python soporta los ndices negativos, aunque no cclicos no puede

    pasarse de una frontera a otra.1 > > > x [ - 2 : , - 2 : ]

    2a r r a y ( [ [ 5 . , 6 . ] ,

    3[ 8 . , 9 . ] ] )

    4> > > x [ - 2 : 1 , - 2 : 1 ]

    5a r r a y ( [ ] , s h a p e = ( 0 , 0 ) , d t y p e = f l o a t 6 4 )

    5. Scipy

    Al poco de su aparicin se constat que por su naturaleza Python poda ser un lenguaje adecuado paraaplicarse a ciencia e ingeniera. Muchos lo vieron como un lenguaje con una filosofa parecida a Matlab

    pero que no contaba con ninguno de sus inconvenientes. El precio que haba que pagar era que no existaninguna biblioteca de funciones y utilidades parecida a la proporcionada por Matlab.Afortunadamente el ncleo fundamental de Matlab, como el lgebra lineal o las transformadas de

    Fourier, es software libre. No hay ninguna diferencia esencial entre Matlab y su competencia a partede los millares de pequeas funciones que implementan pequeos algoritmos. Dotar a otro lenguaje deprogramacin de la misma biblioteca de funciones es una tarea titnica pero tcnicamente posible.

    Scipy es el un esfuerzo comn para dotar a Python, que significa respecto a Matlab un gran avancecomo lenguaje de programacin, de una biblioteca de funciones equivalente. Se constata que el espejo esMatlab en cuanto se advierte que muchas de las funciones de Scipy toman el mismo nombre.

    Scipy es una biblioteca basada en submdulos temticos:

    1 A v a i l a b l e s u b p a c k a g e s

    2 - - - - - - - - - - - - - - - - - - - - -

    3 n d i m a g e - - - n - d i m e n s i o n a l i m a g e p a c k a g e [ * ]

    4 s t a t s - - - S t a t i s t i c a l F u n c t i o n s [ * ]

    5 s i g n a l - - - S i g n a l P r o c e s s i n g T o o l s [ * ]

    6 l i b - - - P y t h o n w r a p p e r s t o e x t e r n a l l i b r a r i e s [ * ]

    7l i n a l g - - - L i n e a r a l g e b r a r o u t i n e s [ * ]

    8l i n s o l v e . u m f p a c k - - - I n t e r f a c e t o t h e U M F P A C K l i b r a r y . [ * ]

    9o d r - - - O r t h o g o n a l D i s t a n c e R e g r e s s i o n [ * ]

    10m i s c - - - V a r i o u s u t i l i t i e s t h a t d o n ' t h a v e a n o t h e r h o m e .

    11s p a r s e - - - S p a r s e m a t r i x [ * ]

    12i n t e r p o l a t e - - - I n t e r p o l a t i o n T o o l s [ * ]

    15

  • 8/4/2019 Python para Cientificos

    16/18

    13 o p t i m i z e - - - O p t i m i z a t i o n T o o l s [ * ]

    14 c l u s t e r - - - V e c t o r Q u a n t i z a t i o n / K m e a n s [ * ]

    15 l i n s o l v e - - - L i n e a r S o l v e r s [ * ]

    16 f f t p a c k - - - D i s c r e t e F o u r i e r T r a n s f o r m a l g o r i t h m s [ * ]

    17 i o - - - D a t a i n p u t a n d o u t p u t [ * ]

    18 m a x e n t r o p y - - - R o u t i n e s f o r f i t t i n g m a x i m u m e n t r o p y m o d e l s [ * ]

    19 i n t e g r a t e - - - I n t e g r a t i o n r o u t i n e s [ * ]

    20 l i b . l a p a c k - - - W r a p p e r s t o L A P A C K l i b r a r y [ * ]

    21 s p e c i a l - - - A i r y F u n c t i o n s [ * ]

    22l i b . b l a s - - - W r a p p e r s t o B L A S l i b r a r y [ * ]

    23[ * ] - u s i n g a p a c k a g e r e q u i r e s e x p l i c i t i m p o r t ( s e e p k g l o a d )

    Scipy est enteramente basada en Numpy que naci para solucionar un pequeo gran problema paraPython: la existencia de dos tipos de arrays.

    Jim Hugunin desarroll Numeric, la primera implementacin de arrays para Python en 1995 cuandoera estudiante del MIT. Numeric estaba diseado para ser rpido y obviaba muchas de las posibles necesi-dades de la clase array dentro de un entorno interactivo. Para paliar estos pequeos inconvenientes Perry

    Greenfield, Todd Miller y Rick White crearon numarray pero nunca consiguieron la misma velocidad deejecucin que Numeric.Esto provoc una gran incertidumbre dentro de la comunidad cientfica que se acercaba a Python. La

    tendencia era pensar que numarray se consolidara y apartara Numeric paulatinamente pero eso nuncallegaba a suceder porque era mucho ms lento. Mientras para un programador era se trataba slo de undilema, para la creacin de una gran biblioteca cientfica era sencillamente una herida sangrante.

    Travis Oliphant se tom el problema como algo personal y junt lo mejor de ambas implementacionesen Numpy dando finalmente la posibilidad a Scipy y a Python de crecer dentro de la comunidad cientficay tcnica.

    Ejercicio:

    El gran punto dbil de Scipy y por extensin, de Numpy, es la documentacin. Para saber cmo

    utilizar una determinada funcin es ms efectivo utilizar la ayuda interactiva del intrprete que bus-car por internet porque no existe ningn directorio. Tampoco se proporciona ninguna base de datosde funciones con Scipy, algo que sera enormemente til.Afortunadamente parece que se est trabajando duramente en ello. Parece que la poltica ser escri-bir slo una documentacin que pueda extraerse y moverse a distintos formatos gracias a un gestorde documentacin llamado sphinx. Este ejercico pretende que el lector batalle un poco con la docu-mentacin resolviendo un problema de mnimos cuadrados generalizados.Dentro del mdulo de scipy optimize se encuentra la funcin l e a s t s q que implementa el algoritmoLevenberg-Marqardt de mnimos cuadrados generalizados. Se trata de crear una serie de datos yajustarlos mediante la funcin objetivo

    f(x,p) =1

    p1 + p2ex

    Entonces el problema ser minimizar, para una serie de datos (xi,yi) el funcional

    R(p) =i

    (yi f(xi,p))2

    Para crear los datos se tomar la funcin objetivo con p1 = 1 y p2 = 2, y se generar una serie decien puntos sumando a la funcin un ruido aleatorio [A.2].Una vez se ajusten los datos obtenidos mediante esta funcin el resultado dera ser precisamentep1 = 1 y p2 = 2.

    16

  • 8/4/2019 Python para Cientificos

    17/18

    6. SAGE

    7. Tcnicas y herramientas para eliminar cuellos de botella

    8. Supercomputacin con Python

    A. Utilidades y soluciones a los problemas

    A.1. Uso de los list comprehension

    La solucin al problema mediante un list comprehension en una sola lnea es la siguiente:

    1> > > a = [ ' u n o ' , ' d o s ' , ' t r e s ' , ' c u a t r o ' ]

    2> > > b = [ w f o r w i n a i f ' o ' i n w ]

    3> > > b

    4[ ' u n o ' , ' d o s ' , ' c u a t r o ' ]

    Esta sintaxis tiene sentido si se lee como si de una frase se tratara: la palabra para cada palabra en asi o est en la palabra.

    A.2. Generador de datos para el ejercicio de mnimos cuadrados generalizados

    Este documento contiene el archivog e n d a t a . p y

    que contiene la funcin que genera los datos delejercicio. Esta funcin devuelve un tuple de dos elementos y debe usarse como sigue:

    1> > > f r o m g e n d a t a i m p o r t g e n d a t a

    2> > > ( x , y ) = g e n d a t a ( )

    B. Python 3.xEsta seccin deber eliminarse en cuando la siguiente versin de Python, la 3.x se haya consolidado

    Python es en la actualidad un lenguaje en plena transicin a una nueva versin. El gran objetivode Python 3.x, anteriormente conocido como Python 3000, es eliminar ciertos errores cometidos en losprimeros estadios del desarrollo del lenguaje y que se han mantenido en l por la voluntad de no rompertodo el cdigo escrito. El objetivo secundario es conseguir ahondar en la propia filosofa de Python comolenguaje sencillo, consistente y corto.

    A partir de la llegada de Python 3.x el cdigo que ejecute en Python 2.x debe escribirse teniendo encuenta muy seriamente los avisos del intrprete en tiempo de ejecucin. En ellos se detallan problemasque pueden aparecer en un futuro proceso de migracin.

    Es tambin una demostracin de valenta. Python es ya un lenguaje maduro y este cambio puederomper infinidad de cdigo que hoy funciona sin ningn problema. Lejos de ser algo que concierne slo a

    unos pocos desarrolladores sitios como Google, YouTube, NASA y miles de empresas, sitios o proyectosde software tendrn que dedicar algo de tiempo esperemos que no mucho al cambio de versin.

    C. Cmo instalar Python

    CPython es el nombre que recibe habitualmente la implementacin estndar en C y la ms difundida.Ha sido portada a una veintena de sistemas operativos desde Windows a Symbian.

    17

  • 8/4/2019 Python para Cientificos

    18/18

    Python se encuentra ya instalado en todas las distribuciones populares de GNU/Linux porque es unlenguaje de uso comn para tareas de configuracin y administracin del sistema. Para instalar mdulosadicionales es recomendable utilizar el sistema de paquetes del propio sistema operativo para que las

    actualizaciones se produzcan automticamente.En la pgina webh t t p : / / p y t h o n . o r g /

    Referencias

    [TUT] Python Tutorial; Guido van Rossum, Python Software Foundation;h t t p : / / d o c s . p y t h o n . o r g /

    t u t / t u t . h t m l

    [REF] Python Reference Manual; Guido van Rossum, Python Software Foundation;h t t p : / / d o c s .

    p y t h o n . o r g / r e f / r e f . h t m l

    [STB] Python Library Reference; Guido van Rossum, Python Software Foundation;h t t p : / / d o c s .

    p y t h o n . o r g / l i b / l i b . h t m l

    [OCT] Introduccin Informal a Matlab y Octave; Guillem Borrell i Nogueras;h t t p : / / i i m y o . f o r j a .

    r e d i r i s . e s

    . ISBN: 978-8-4691-3626-3

    [NUM] Guide to NumPy; Travis E. Oliphant; March 15, 2006;h t t p : / / w w w . t r e l g o l . c o m /

    18

    http://iimyo.forja.rediris.es/http://www.trelgol.com/http://iimyo.forja.rediris.es/http://iimyo.forja.rediris.es/http://docs.python.org/lib/lib.htmlhttp://docs.python.org/lib/lib.htmlhttp://docs.python.org/ref/ref.htmlhttp://docs.python.org/ref/ref.htmlhttp://docs.python.org/tut/tut.htmlhttp://docs.python.org/tut/tut.htmlhttp://python.org/