-->

martes, 26 de febrero de 2013

Introducción al manejo de matrices en Python

Si hay algo que me gusta de Python es la variedad de cosas que se pueden hacer con él. Desde programar cálculos científicos (numpy,scipy,cvxopt, hasta montar una página web (django). 


Durante mi tesis conocí CVXOPT. Un paquete escrito en Python destinado a optimización lineal convexa. Sin embargo, es en realidad un wrapper a las grandes librerías de algebra lineal BLAS/LAPACK y para matrices dispersas UMFPACK. El cual es realmente bueno.
A continuación les muestro un notebook que realicé en iPython y lo convertía a HTML/css con ayuda de nbconvert:


In [1]:
from cvxopt import matrix
# Creamos una lista con los valores de la matriz que queremos.
a_lista = [[1,2],[3,4]]
A = matrix(a_lista)
In [2]:
print A
[ 1  3]
[ 2  4]
In [3]:
# Notar que cvxopt coloca los elementos en forma de columna, no en forma de renglon como estamos acostumbrados.
# Transponiendo
B = A.T
print B
[ 1  2]
[ 3  4]
In [4]:
# Cvxopt permite hacer diversas operaciones matriciales con un desempeño demasiado bueno
from cvxopt import mul,div
# Muliplicación y división elemento a elemento
print mul(A,B)
print div(A,B)
# Multiplicación matricial
print A*B
# Afectando por un escalar
print A*4.5
[  1   6]
[  6  16]

[ 1  1]
[ 0  1]

[ 10  14]
[ 14  20]

[  4.50  13.50]
[  9.00  18.00]
In [5]:
# Notar que algunas matrices no tienen los resultados correctos. Estos es porque la matriz no
# fue declarada para manejar números de coma flotante y tomó el tipo de dato de la lista (entero)
# El tipo de dato se obtiene:
print A.typecode
i

'i' = enteros
'd' = dobles
'z' = dobles con parte imaginaria (complejos)

In [8]:
# Podemos cambiar el tipo de dato al crear la matriz:
A = matrix(a_lista,(2,2),'d')
In [9]:
# Se debe especificar el tamaño de la matriz con una tupla
print A
[ 1.00  3.00]
[ 2.00  4.00]

Un breve panorama de lo que hace CVXOPT.

No hay comentarios:

Publicar un comentario