Utlizacion de los Arrays y Listas en Python
He leído constantemente que python es un lenguaje muy poderoso con el cual se puede hacer prácticamente lo que uno desee. Recientemente, me adentré en su mundo tratando de programar algunas aplicaciones para GRASS, sin embargo, esa “zambullida” fue prácticamente sin conocer muchos detalles del lenguaje y eso me ha traído algunos problemas. Por esta razón me propuse identificar algunos aspectos que tenía que aprender mejor y ese correspondía al de arrays y matrices.
Para sistematizar las operaciones que se pueden lograr con éstos se cuenta con el módulo numpy. Como también es tedioso el hecho de tener que digitar en cónsola los arreglos y matrices, especialmente cuando estos son muy grandes, me propuse a averiguar como se puede realizar esta tarea de manera expedita. Para ello, decidí crear un archivo de texto plano (archivo2) que contiene dos matrices de 3×3 (la primera es real simétrica porque se sabe que su inversa está definida) con la siguiente configuración:
1 2 3
2 1 4
3 4 1
1 2 3
4 5 6
7 8 9
Para leer ese archivo e imprimirlo por pantalla tendríamos suficiente con:
#! /usr/bin/env python
pfile=open('archivo2','r')
data=pfile.read()
pfile.close()
print data
y es simplemente texto. Con el código siguiente ya se imprime con un formato de array:
#! /usr/bin/env python
#Librerias
import numpy as np
from StringIO import StringIO
pfile=open('archivo2','r')
data=pfile.read()
pfile.close()
data=np.genfromtxt(StringIO(data)) #Se sobre entiende que los
#delimitadores son espacios
print data
donde la salida es la siguiente:
[[ 1. 2. 3.]
[ 2. 1. 4.]
[ 3. 4. 1.]
[ 1. 2. 3.]
[ 4. 5. 6.]
[ 7. 8. 9.]]
Para individualizar las matrices y “multiplicarlas”:
#! /usr/bin/env python
#Librerias
import numpy as np
from StringIO import StringIO
pfile=open('archivo2','r')
data=pfile.read()
pfile.close()
data=np.genfromtxt(StringIO(data)) #Se sobre entiende que los
#delimitadores son espacios
matriz1 = data[0:3]
matriz2 = data[3:6]
matriz3 = matriz1 * matriz2
print matriz3
se tiene que la salida es la siguiente:
[[ 1. 4. 9.]
[ 8. 5. 24.]
[ 21. 32. 9.]]
Sin embargo, esta salida no corresponde a una multiplicación de matrices propiamente dicha porque, hasta ahora, genfromtxt lo que hizo fue simplemente transformar el texto en un array de arrays. Para transformar en matriz y obtener el resultado esperado hay que incluir una instrucción adicional:
#! /usr/bin/env python
#Librerias
import numpy as np
from StringIO import StringIO
pfile=open('archivo2','r')
data=pfile.read()
pfile.close()
data=np.genfromtxt(StringIO(data)) #Se sobre entiende que los
#delimitadores son espacios
data=np.matrix(data) #Transformar array de arrays en matriz
matriz1 = data[0:3]
matriz2 = data[3:6]
matriz3 = matriz1 * matriz2
print matriz3
donde ahora la salida si es la esperada para una multiplicación de matrices:
[[ 30. 36. 42.]
[ 34. 41. 48.]
[ 26. 34. 42.]]
Por otra parte, si se quiere determinar, por ejemplo, la inversa de una matriz entonces hay que importar el módulo linalg de scipy. El código sería el siguiente:
#! /usr/bin/env python
#Librerias
import numpy as np
from StringIO import StringIO
from scipy.linalg import *
pfile=open('archivo2','r')
data=pfile.read()
pfile.close()
data=np.genfromtxt(StringIO(data)) #Se sobre entiende que los
#delimitadores son espacios
#data=np.matrix(data) #Transformar array de arrays en matriz
matriz1 = data[0:3]
matriz2 = data[3:6]
matriz3 = matriz1 * matriz2
matriz4=inv(matriz1) #inv determina la inversa
print matriz4 #matriz inversa de matriz1
cuya salida para la inversa es:
[[-0.75 0.5 0.25]
[ 0.5 -0.4 0.1 ]
[ 0.25 0.1 -0.15]]
Con estos conocimientos básicos de manejo de arrays y matrices la parte que se detalla del script .
Comentarios
Publicar un comentario