You are on page 1of 11

Captulo 5

Programaci n cientca en Python


o

Hasta ahora hemos visto las bases para crear programas sencillos en Python. Para poder crear
programas un poco m s poderosos es conveniente saber usar algunas herramientas m s fuertes
a
a
como la librera num rica de Python, numpy, junto con algunos consejos que pueden resultar

utiles a la hora de hacer un programa m s elaborado.


a

5.1.

Numpy

Acr nimo de Python num rico en ingl s, esta librera provee una de las herramientas m s
o
e
e

utiles en el c mputo cientco: los arreglos n-dimensionales. Para denir un arreglo de este tipo se
o

utiliza array:
>>a=array([1.2,2.2,4.5])
Cabe destacar que se utilizan tanto los par ntesis como los par ntesis cuadrados, en ese orden,
e
e
al momento de denir un arreglo entrada por entrada. Si en cambio se requiere de un arreglo de
n meros consecutivos se puede utilizar arange:
u
>>> b=arange(0.1,1,0.1)
>>> print b
[ 0.1 0.2 0.3 0.4 0.5
>>>

0.6

0.7

0.8

0.9]

los argumentos de arange son (origen, nal, tama o del paso). En caso de que no se especifque
n

el tama o del paso, este ser por default 1. Si no se especca el origen, este ser por default 0.
n
a

a
Tambi n se pueden denir arreglos con puros ceros o unos:
e
57

58

CAPITULO 5. PROGRAMACION CIENTIFICA EN PYTHON

>>> b=zeros(10).reshape(2,5)
>>> b
array([[ 0., 0., 0., 0., 0.],
[ 0., 0., 0., 0., 0.]])
>>> b=ones(10)
>>> b
array([ 1., 1., 1., 1., 1., 1.,

1.,

1.,

1.,

1.])

reshape(2,5) da la forma en dos las y 5 columnas.


Se pueden hacer muchas cosas con los arreglos. Tomando nuestro arreglo b del ejemplo anterior,
b.ndim: nos dice el n mero de dimensiones del arreglo.
u
b.size: nos dice el n mero de elementos que contiene el arreglo.
u
b.shape: nos dice la forma del arreglo en n mero de las y columnas. Tambi n puede
u
e
cambiar la forma del arreglo usando b.shape=2,5 donde 2 y 5 son las las y columnas
respectivamente.
b.transpose(): transpone el arreglo. Si era un arreglo de 2 las y 5 columnas, pasa a ser
de 5 las y 2 columnas.
b.ravel(): reordena el arreglo en una sola la
b.sum(): suma todos sus elemetos. Se pueden agregar argumentos a sum() para sumar los

elementos de las columnas o de las las usando axis=0 o axis=1.


b.min(): da el valor mnimo de los elementos. Tambi n se pueden usar como argumentos

e
los ejes.
b.max(): lo mismo que el anterior s lo que ahora es el m ximo.
o
a
Una de las grandes ventajas de numpy es que permite un manejo sencillo de los arreglos. De
esta manera, si dos arreglos son del mismo tama o podemos sumarlos o restarlos.
n
>>> a=ones(3)
>>> a
array([ 1., 1., 1.])
>>> b=ones(10)
>>> b
array([ 1., 1., 1., 1., 1., 1., 1.,
>>> a+b
Traceback (most recent call last):
File "<stdin>", line 1, in <module>

1.,

1.,

1.])

5.2. MATPLOTLIB

59

ValueError: shape mismatch: objects cannot be broadcast to a single shape


>>> a=ones(10)
>>> a+b
array([ 2., 2., 2., 2., 2., 2., 2., 2., 2., 2.])
>>> a-b
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
Tambi n se pueden a adir reales a todos los n meros del arreglo
e
n
u
>>> a+sin(pi/2)
array([ 2., 2.,

2.,

2.,

2.,

2.,

2.,

2.,

2.,

2.])

Si los arreglos se usan como matrices dot(a,b) regresa el producto de las dos matrices con
las mismas condiciones que se requieren para un producto de matrices.

Otra de las partes m s utiles de esta librera es la de algebra lineal. Algunas de las funciones
a

que se pueden realizar con ella son:


linalg.inv(A)
linalg.eig(A)
La primera encuentra la inversa de la matriz A y la segunda nos devuelve los eigenvectores y
eigenvalores de la matriz A en un arreglo.

5.2.

Matplotlib

Podramos decir que con estas libreras tenemos cubierta buena parte del algebra necesaria para

solucionar muchos problemas fsicos. Sin embargo todava no podemos gracar todos los resulta

dos obtenidos sin tener que usar alguna herramienta exterior. matplotlib es una de las mejores y
m s desarrolladas herramientas para gr cas 2D que junto con numpy y scipy forman pylab, una
a
a
alternativa para matlab. Para usar pylab de manera similar a matlab usamos la versi n interactiva
o
de python:
ipython -pylab
Una vez ah podemos gracar cosas muy f cilmente por medio del comando plot() que toma

a
como argumento la funci n que se quiere gracar
o
t=arange(0.0, 2.0*pi, 0.1)
plot (t)
plot (t,t)
plot(sin(t), cos(t))

CAPITULO 5. PROGRAMACION CIENTIFICA EN PYTHON

60

Se pueden colocar nombres a los ejes usando xlabel(nombre) y ylabel(nombre) . Tambien se puede colocar una malla de fondo como referencia usando grid(True) .
Para colocar dos funciones en una misma gr ca usamos
a
t = arange(0.0, 5.0, 0.05)
s1 = sin(2*pi*t)
s2 = s1*exp(-t)
plot(t, s1, t, s2)
Se puede agregar una leyenda con el comando
legend((sine wave, damped exponential))
Se pueden tambi n hacer subgr cas (Figura 5.1):
e
a
from pylab import *
def f(t):
return cos(2*pi*t) * exp(-t)
t1 = arange(0.0, 5.0, 0.1)
t2 = arange(0.0, 5.0, 0.02)
subplot(211)
l = plot(t1, f(t1), bo, t2, f(t2), k)
grid(True)
title(2 subplots)
ylabel(Damped)
subplot(212)
plot(t2, cos(2*pi*t2), r>)
grid(True)
xlabel(time (s))
ylabel(Undamped)
show()
Se pueden visualizar otras cosas como n meros aleatorios (Figura 5.2):
u
from pylab import *
clf()
X = rand(20,20)
im = imshow(X)
pcolor(X)
Es f cil cargar y guardar archivos usando pylab, simplemente se usa el comando load(filename)
a
para cargar y save(filename,X) para guardar un arreglo X en filename.

5.2. MATPLOTLIB

61

2 subplots

Undamped

Damped

1.0
0.8
0.6
0.4
0.2
0.0
-0.2
-0.4
-0.6
-0.80
1.0

0.5
0.0

-0.5

-1.00

time (s)

Figura 5.1: Ejemplo de subgr cas


a

10

15

20

10

15

20

Figura 5.2: Ejemplo de visualizaci n de n meros aleatorios


o
u

62

CAPITULO 5. PROGRAMACION CIENTIFICA EN PYTHON

Captulo 6

Gnuplot
6.1.

Gnuplot

Una alternativa a la librera gr ca de Python matplotlib es gnuplot. Gnuplot es una he


a
rramienta sencilla pero poderosa para dibujar funciones y archivos de datos en 2 y 3 dimensiones e imprimir los resultados en varios tipos de formatos gr cos. Es una herramienta de lnea
a

1
de comandos, no tiene interfaz gr ca . La versi n actual es 4.2 y se encuentra en su p gina
a
o
a
http://www.gnuplot.info. Existen muchos tutoriales al respecto y una p gina con muchos ejemplos
a
de su uso es http://gnuplot.sourceforge.net/demo4.2. Existe tambi n un newsgroup donde se puede
e
solicitar ayuda en comp.graphics.apps.gnuplot. Adem s el programa tiene ayuda interna que se
a
puede consultar con el comando help, como por ejemplo help plot.

6.1.1. Gr cas 2D
a
Para dibujar funciones en 2D basta usar el comando plot seguido de la funci n que se quiere
o
gracar, usando como variable a x, o el nombre del archivo en el cual est n los datos entre comillas
a
() o una sola comilla (),
plot sin(x)
plot "datos.dat"
Se pueden denir variables y funciones:
a=3
plot sin(a*x)
f(x)=sin(a*x)
plot a=1, f(x) title sin(x), a=2, f(x) title sin 2x, a=3, f(x) t sin 3x
1

Para ello se puede utilizar xmgrace para gr cas en 2D


a

63


CAPITULO 6. GNUPLOT

64

Para gracar varias funciones en una sola gr ca basta con separar las funciones por comas, como
a
se muestra en el ejemplo. Se pueden tambien poner ttulos con title seguido del nombre entre

comillas. Muchas de las opciones en gnuplot se pueden abreviar y no se debe poner toda la palabra
para que el programa lo interprete. En este caso podemos resumir title con s lo una t.
o
Las funciones las eval a en varios puntos. Para ver como lo hace podemos poner
u
plot sin(x) with points
plot sin(x) w p
set samp 500
set xlabel Eje x
set ylabel Eje y
replot
Podemos establecer el n mero de puntos con set samp y editar los nombres de los ejes con set
u
xlabel y set ylabel. Al editar alg n cambio de formato en la gr ca no debemos escribir de
u
a
nuevo el comando plot con todas las funciones sino que basta con poner replot.
Por default todas las gr cas se muestran en un interfaz gr co, pero quiz requerimos las
a
a
a
gr cas en un archivo para su posterior uso. Para ello debemos establecer la terminal donde se va
a
a imprimir la gr ca y el nombre del archivo que se quiere crear,
a
set term png
set out grafica.png
Para saber que formatos gr cos se pueden utilizar se puede consultar la ayuda interna de set
a
term. Se puede regresar al terminal original usando set term pop.
Tambi n podemos usar la lnea de comandos del bash desde gnuplot sin tener que abrir otra
e

ventanta del terminal usando !. As podemos visualizar las im genes guardadas con

a
!kghostview sin.eps
!ps2pdf sin.eps
!kpdf sin.pdf
Donde kghostview es un programa para visualizaci n de archivos postcript y kpdf para archivos
o
pdf.

6.1.2. Gr cas con archivos de datos


a
Cuando se graca directamente desde un archivo se puede determinar que datos en especco

del archivo se quieren utilizar. Para dibujar la primera y segunda columna se usa indistintamente,

6.1. GNUPLOT

65

plot in.dat using 1:2


plot in.dat u 1:2
Se pueden combinar los valores de diferentes columnas usando $ . De esta manera si queremos
gracar la columna 1 con la suma de las columnas 2 y 3 escribimos,
plot in.dat u 1:($2+$3)
Recordando el uso de los par ntesis.
e
Podemos dibujar algunos datos con el comando every ,
plot in.dat every 10
Se pueden usar barras de errores con
plot in.dat w errorbars
Se pueden escoger distintos tipos de lneas y puntos usando

plot "in.dat" w lp lt 3 lw 3 pt 5 ps 1.5


Donde lt es el tipo de lnea, pt el tipo de punto, lw el ancho de lnea y ps el tama o de los puntos.

n
Otros estilos de representaci n se pueden consultar con help plot style.
o
Tambi n se pueden especicar los rangos usando:
e
set xrange [3:10]
set xange auto
set yrange [4:10]

6.1.3. Scripts
Si se van a hacer muchas gr cas con un mismo formato se pueden utilizar scripts de manera
a
que no se tenga que volver a escribir todo el formato de la gr ca cada que se quiere gracar. Para
a
ello s lo se tiene que crear un archivo con la terminaci n .gp. Los comandos se escriben uno por
o
o
rengl n para que los pueda interpretar gnuplot. Por ejemplo, si tenemos el archivo sin.gp que
o
contiene una lnea que dice plot sin(x) , basta con escribir en una terminal gnuplot -persist

sin.gp para que se muestre la gr ca en pantalla. El -persist es para que se mantenga la imagen
a
por tiempo indenido y no s lo se muestre y desaparezca.
o


CAPITULO 6. GNUPLOT

66

6.1.4. Gr cas 3D
a
Para gracar en 3D usamos el comando splot en lugar de plot. La segunda variable est dada
a
por y de manera que podemos hacer gr cas como,
a
splot sin(x)*cos(y)
Se puede usar el rat n para rotar la gura y el bot n de enmedio para expandir y contraer la imagen.
o
o
Podemos tener una vista desde arriba con set view map.
Para dibujar datos en 3 dimensiones con colores podemos usar
splot "datos.dat" u 1:2:3:4 pal
Donde la cuarta columna corresponde a pal que es la paleta de colores. Se puede variar la paleta
con set palette.
Tambi n se pueden hacer contornos con
e
set contour surface
set cntrparam levels auto 10

6.1.5. Proceso de datos


Se puede dibujar nada m s una parte de un archivo de datos usando un truco, si gnuplot ve NaN
a
(Not a Number), entonces no dibuja nada. Entonces, se emplea el operador ternario:
(a>0) ? a : NaN
que quiere decir: si a>0, entonces devolver el valor a; si no, devolver NaN. Por ejemplo,
plot "in.dat" u ($1>0 ? $1 : NaN):2
dibujar los datos que tienen primera columna mayor que 0 nada m s.
a
a
Los datos en un archivo se pueden procesar antes de dibujarse asi:
gnuplot "< awk {print $1, $2+$3} in.dat"

En este ejemplo se puede hacer lo mismo directamente en gnuplot, pero puede ser muy util. Por
ejemplo, supongamos que hay dos archivos, 1.dat y 2.dat, que tienen la misma primera columna,
y queremos dibujar la segunda columna del primer archivo contra la segunda columna del segundo
archivo:

6.1. GNUPLOT

67

gnuplot "< join 1.dat 2.dat" u 2:3

A
6.1.6. Gnuplot y LTEX
A
gnuplot tiene la facilidad de mandar las etiquetas de las gr cas a LTEX,
a

set term epslatex blacktext color 9 dl 2 size 8.0cm, 5.5cm standalone


A
Donde dl es dash length (longitud de las puntillas) y standalone produce un archivo LTEXcompilable.
Sin standalone produce un .tex que hay que usar con \include{test.tex}. As se puede te
ner m s control sobre el output. Para ir ajustando la salida, conviene guardar los comandos que
a
generan la gr ca en un script.
a

6.1.7. Macros
Tambi n se pueden hacer macros con
e
set macros
estilo = "every 5 u 1:10 w lp"
plot "1.dat" @estilo, "2.dat" @estilo
Donde @estilo se reemplaza con el texto denido.

You might also like