12 Python Interprete de Comandos
12 Python Interprete de Comandos
12 Python Interprete de Comandos
Computacional
PROGRAMACIÓN
In [1]: !pwd
In [2]: !ls
El entorno ipython
También es posible guardar una bitacora (log)
de la sesión. Esto se logra mediante el comando
logstart.
In [1]: who?
In [1]: funcion??
BIBLIOTECAS
La gran versatilidad de python vine dada en gran
parte por el conjunto de bibliotecas que este ya
tiene incorporadas, así que hay que aprovechar lo
que ya esta hecho! Por ejemplo:
mayavi2
●
BIBLIOTECAS
De esta manera, se deben instalar estas bibliotecas
(librerias), para poder usarlas.
1 / 2
3 / 2
1 / 2.
ARITMÉTICA
Los números sin punto decimal se consideran enteros, y
los con punto decimal flotantes (de doble precisión).
2 ** 2 ** 2 ** 2 ** 2
1 + 3j
1j * 1j
j # da un error
a
a = 3
b = 17.5
c = 1 + 3j
print a + b / c
a = 3
a = 5.5
a = float(3) pi = float('3.1416')
b = int(17.) edad = int(”19”)
"hola"
'mi edad es: '
Aritmética con precisión arbitraria.
A veces, es necesario poder llevar a cabo operaciones
aritméticas con números flotantes (reales) con
precisión superior a los 16 dígitos que provee el float
(número de “doble precisión”) de Python. Para hacerlo,
existen varios proyectos que proveen bibliotecas con
este fin.
mp.dps = 50
x = mpf('1.0')
donde el número se expresa como cadena.
print x/6. , x*10
print mpf('2.0')**2**2**2**2
Aritmética con precisión arbitraria.
Con mpmath, no hay límite del exponente que se
puede manejar. También están definidas muchas
funciones, por ejemplo sin, exp y log.
nprint(x, 20)
x = mpf('31.346')
x = x**2**2**2**2
x/6.
nprint(x, 20)
Arreglos
En Python hay 3 tipos diferentes de arreglos. Las
listas, las n-adas (o tuples) y los arreglos numpy,
estos últimos son mas robustos y con ellos se puede
representar vectores e incluso matrices.
Listas.
La estructura de datos principal en Python es la lista.
Consiste literalmente en una lista ordenada de cosas, y
reemplaza a los arreglos en otros lenguajes. La
diferencia es que las listas en Python son
automáticamente de longitud variable, y pueden contener
objetos de cualquier tipo.
Listas
Una lista se define entre corchetes ([ y ]):
l = [3, 4, 6]
l = [3.5, 1, "hola", [1.0, [3, 17]]]
l = [1, 2, 3]
print l[0], l[1]
l[0] = 5
l
Listas
Se pueden manipular rebanadas (“slices”) de
la lista con la notación l[1:3]:
l = [1, 2, 3, 6, 7]
l[1:3]
l[:3]
l[3:]
l = [] # lista vacía
l.append(17)
l.append(3)
print l, len(l)
l.<TAB>
Listas (la función range)
Para averiguar que es lo que hace una
función, se puede investigar de manera
interactiva con ipython:
In [1]: range??
In [2]: range(10)
Out[2]: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Listas (la función range)
Nótese que la lista comienza en 0 (cero) y que se
omite el elemento final, por ejemplo range(4)
es una lista de cuatro elementos que llega hasta
el 3.
In [3]: range(4)
Out[3]: [0, 1, 2, 3]
range(3,10)
[3, 4, 5, 6, 7, 8, 9]
Listas (la función range)
O bien también se le puede indicar un paso de
incremento:
range(3,17,2)
[3, 5, 7, 9, 11, 13, 15]
range(3,17,3)
[3, 6, 9, 12, 15]
range(3,17,5)
[3, 8, 13]
t = (3, 5)
t[0]
t[0] = 1 # error!
a, b = 3, 5
print a; print b
Arreglos numpy (vectores).
Por lo general las listas y tuples se utilizan para guardar
y manipular datos. Sin embargo, las listas no se
comportan como vectores, y menos como matrices (al
sumarlos no se comportan de la manera adecuada,
etc.). El propósito de la biblioteca numpy es justamente
el de proporcionar objetos que representan a vectores
y matrices matemáticos, con todas las bondades que
traen consigo este tipo de objetos.
from numpy import *
a = array( [1, 2, 1, 100] )
a.dtype
Arreglos numpy (vectores).
Es común querer crear vectores de cierto
tamaño con todos ceros:
b = zeros(10)
print b
o todos unos:
b = ones(10)
print b
Arreglos numpy (vectores).
También hay distintas maneras de crear
vectores que consisten en rangos ordenados,
por ejemplo arange, que funciona como
range, con un punto inicial, un punto final, y un
paso:
a = arange(0., 10., 0.1)
l = linspace(0., 10., 11)
Arreglos numpy (vectores).
Una notación abreviada para construir vectores es r_, que
se puede pensar como una abreviación de “vector
renglón”:
a = r_[1,2,10,1.]
r_[3:7]
r_[3:7:0.5]
r_[3:7:10j]
a = array( [1., 4., 7. ])
b = array( [1., 2., 2. ])
print a+b, ab, a*b, a/b, a**b
def gauss(x):
return 1./(sqrt(2.)) * exp(x*x / 2.)
gauss( r_[0:10] )
Arreglos numpy (vectores).
Para extraer subpartes de un vector, la misma
sintaxis funciona como para listas: se extraen
componentes (entradas) individuales con
a = array([0, 1, 2, 3])
print a[0], a[2]
y subvectores con
b = a[1:3]
Arreglos numpy (vectores).
Nótese, sin embargo, que en este caso la variable
b no es una copia de esta parte de a. Más bien, es
una vista de a, así que ahora si hacemos
b[1] = 10
l=[1,2,3]; k=l; k[1] = 10
M = array( [ [1, 2], [3, 4] ] )
M.shape
M.shape = (4, 1); print M
o con
M.reshape( 2, 2 )
Arreglos numpy (Marices).
De hecho, eso es una manera util de crear las
matrices:
M = r_[0:4].reshape(2,2)
def f(i, j):
return i+j
M = fromfunction(f, (3, 3))
Arreglos numpy (Marices).
Dado que las matrices son vectores de vectores, al
hacer
print M[0]
M[0][1]
M[0, 1]
M = identity(10)
M[3:5]
M[:, 3:5]
M[3:9, 3:5] #matriz identidad de 10x10
tile( M, (2,2) )
Arreglos numpy (Marices).
Otros métodos útiles son diagonal, que
regresa una diagonal de un arreglo:
diagonal(M)
diagonal(M, 1)
diag([1,2,3])
diag([1,2,3], 2)
Arreglos numpy (números aleatorios).
La biblioteca numpy incluye un módulo amplio para
manipular números aleatorios, llamado random. Las
funciones se llaman, por ejemplo con,
random.random(). Pero para facilitarnos la vida,
podemos importar todas estas funciones al espacio
de nombres con:
from numpy import *
random? #informacion sobre el modulo
from random import * #'random' esta
o bien
from numpy.random import *
Arreglos numpy (números aleatorios).
Nótese que hay otro módulo random que existe
afuera de numpy, con distinta funcionalidad. La
funcionalidad básica del módulo es la de generar
números aleatorios distribuidos de manera uniforme
en el intervalo [0, 1):
random()
for i in xrange(10):
random()
rand(10, 20)
from math import *
ipython -pylab
from cmath import *
sqrt(1)
ipython y bibliotecas matemáticas
Sin embargo, al hacer esto “se perderán” las funciones
anteriores, es decir, las nuevas funciones han reemplazado
a las distintas funciones con los mismos nombres que había
antes. Una solución es importar la biblioteca de otra
manera:
import cmath
cmath.sqrt(1)